perm filename CH5G.XGP[206,LSP] blob
sn#237892 filedate 1976-09-18 generic text, type T, neo UTF8
/LMAR=0/XLINE=3/FONT#0=BASL30/FONT#1=BDR30/FONT#2=BASI30/FONT#3=BASB30/FONT#4=BDR30/FONT#5=SUB/FONT#6=SUP/FONT#9=FIX40/FONT#10=FIX30
␈↓ ↓H␈↓␈↓ ε`␈↓ i1
␈↓ ↓H␈↓β␈↓ ¬|CHAPTER III
␈↓ ↓H␈↓β␈↓ ¬bCompiling in Lisp
␈↓ ↓H␈↓1. ␈↓βIntroduction␈↓
␈↓ ↓H␈↓ Compiling␈αis␈αan␈αimportant␈αexample␈αof␈αsymbolic␈αcomputation␈αthat␈αhas␈αreceived␈αmuch␈αstudy.␈α A
␈↓ ↓H␈↓large␈α∞part␈α∂of␈α∞this␈α∂study␈α∞has␈α∂been␈α∞devoted␈α∞to␈α∂parsing␈α∞which␈α∂is␈α∞essentially␈α∂the␈α∞transformation␈α∂of␈α∞an
␈↓ ↓H␈↓input␈α
string␈α∞in␈α
the␈α
source␈α∞language␈α
into␈α∞an␈α
internal␈α
form.␈α∞ The␈α
internal␈α
form␈α∞used␈α
depends␈α∞on␈α
the
␈↓ ↓H␈↓compiler.␈α∪ Sometimes␈α∪it␈α∀is␈α∪Polish␈α∪prefix␈α∀or␈α∪postfix␈α∪notation,␈α∪sometimes␈α∀it␈α∪is␈α∪list␈α∀structure,␈α∪and
␈↓ ↓H␈↓sometimes it consists of entries in a collection of tables.
␈↓ ↓H␈↓ When␈α⊃S-expression␈α⊃LISP␈α⊂is␈α⊃being␈α⊃compiled,␈α⊃the␈α⊂parsing␈α⊃is␈α⊃trivial,␈α⊂because␈α⊃the␈α⊃input␈α⊃is␈α⊂S-
␈↓ ↓H␈↓expressions␈αand␈αthe␈αinternal␈αform␈α
wanted␈αis␈αlist␈αstructure,␈αand␈α
therefore␈αwhat␈αparsing␈αthere␈αis␈αis␈α
done
␈↓ ↓H␈↓by␈α∞the␈α∂ordinary␈α∞LISP␈α∂␈↓αread␈↓␈α∞routine.␈α∂ Therefore,␈α∞compilers␈α∞can␈α∂be␈α∞very␈α∂compact␈α∞and␈α∂transparent␈α∞in
␈↓ ↓H␈↓structure,␈αand␈α
we␈αcan␈αconcentrate␈α
our␈αattention␈αon␈α
the␈αcode␈αgeneration␈α
phase.␈α This␈αis␈α
as␈αit␈αshould␈α
be,
␈↓ ↓H␈↓because,␈α∂in␈α∂my␈α⊂opinion,␈α∂parsing␈α∂is␈α⊂basically␈α∂a␈α∂side␈α⊂issue␈α∂in␈α∂compiling,␈α⊂and␈α∂code␈α∂generation␈α⊂is␈α∂the
␈↓ ↓H␈↓matter of main scientific interest.
␈↓ ↓H␈↓ We␈αshall␈αdescribe␈αtwo␈αcompilers␈αin␈αthis␈αchapter␈αcalled␈αLCOM0␈αand␈αLCOM4␈αwhich␈αcompile␈αS-
␈↓ ↓H␈↓expression␈α∞LISP␈α∂into␈α∞machine␈α∞language␈α∂for␈α∞the␈α∂PDP-10␈α∞computer␈α∞according␈α∂to␈α∞the␈α∂conventions␈α∞of
␈↓ ↓H␈↓Stanford␈αLISP␈α1.6.␈α For␈αthe␈αpresent,␈αwe␈αshall␈αtake␈αthese␈αconventions␈αfor␈αgranted.␈α Before␈αwe␈αdescribe
␈↓ ↓H␈↓the compilers, we must describe these conventions.
␈↓ ↓H␈↓ First␈α∞of␈α
all,␈α∞the␈α∞target␈α
language␈α∞is␈α
called␈α∞LAP␈α∞for␈α
LISP␈α∞assembly␈α
program.␈α∞ Each␈α∞function␈α
is
␈↓ ↓H␈↓compiled␈α
separately␈α∞into␈α
a␈α∞separate␈α
LAP␈α
program,␈α∞and␈α
these␈α∞programs␈α
are␈α
written␈α∞onto␈α
a␈α∞disk␈α
file.
␈↓ ↓H␈↓These␈αfiles␈αcan␈α
later␈αbe␈αread␈αinto␈α
a␈αLISP␈αcore␈α
image␈αand␈αassembled␈αin␈α
place␈αby␈αthe␈α
LAP␈αassembler
␈↓ ↓H␈↓which␈α
is␈α
part␈α
of␈α
the␈α
LISP␈α
runtime␈α
routines.␈α
The␈α
compiler,␈α
on␈α
the␈α
other␈α
hand,␈α
is␈α
a␈α
separate␈αLISP␈α
core
␈↓ ↓H␈↓image␈αthat␈αcan␈αbe␈αinstructed␈αto␈αcompile␈αseveral␈α
input␈αfiles␈αand␈αwill␈αproduce␈αoutput␈αfiles␈αof␈α
the␈αsame
␈↓ ↓H␈↓name␈αand␈αfile␈αextension␈αLAP.␈α All␈αthis␈αis␈αspecific␈αto␈αthe␈αPDP-10␈αtime-sharing␈αsystem␈αand␈αfortunately
␈↓ ↓H␈↓works␈α∪the␈α∪same␈α∪whether␈α∪the␈α∪time-sharing␈α∪system␈α∩is␈α∪the␈α∪D.E.C.␈α∪system,␈α∪the␈α∪Stanford␈α∪system,␈α∩or
␈↓ ↓H␈↓TENEX.
␈↓ ↓H␈↓ The␈α
LAP␈α
program␈α
produced␈α
is␈α
a␈α∞list␈α
of␈α
words;␈α
the␈α
last␈α
word␈α∞is␈α
NIL,␈α
and␈α
the␈α
first␈α
word␈α∞is␈α
a
␈↓ ↓H␈↓header␈α∞of␈α
the␈α∞form␈α∞(LAP␈α
␈↓αfname␈↓␈α∞SUBR)␈α∞where␈α
␈↓αfname␈↓␈α∞is␈α
the␈α∞name␈α∞of␈α
the␈α∞function␈α∞compiled.␈α
This
␈↓ ↓H␈↓header␈α∂tells␈α∂the␈α⊂DSKIN␈α∂program␈α∂that␈α⊂it␈α∂should␈α∂read␈α⊂S-expressions␈α∂till␈α∂it␈α⊂comes␈α∂to␈α∂NIL␈α⊂and␈α∂then
␈↓ ↓H␈↓submit␈αwhat␈αit␈αhas␈α
collected␈αto␈αthe␈αLAP␈α
assembler␈αwhich␈αwill␈αassemble␈αit␈α
into␈αcore.␈α The␈αrest␈α
of␈αthe
␈↓ ↓H␈↓words are either atoms representing labels or lists representing single PDP-10 instructions.
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ i2
␈↓ ↓H␈↓2. ␈↓βSome facts about the PDP-10.␈↓
␈↓ ↓H␈↓ The following facts about the PDP-10 may be of use.
␈↓ ↓H␈↓ The␈α
PDP-10␈α has␈α
a␈α 36␈α
bit␈α word␈α
and␈α
an␈α18␈α
bit␈αaddress.␈α
In␈αinstructions␈α
and␈αin␈α
accumulators
␈↓ ↓H␈↓used␈αas␈αindex␈αregisters␈αthis␈αis␈αfound␈αin␈αthe␈α
right␈αpart␈αof␈αthe␈αword␈αwhere␈αthe␈αleast␈αsignificant␈α
bits␈αin
␈↓ ↓H␈↓arithmetic reside.
␈↓ ↓H␈↓ There␈α⊃are␈α⊃16␈α∩general␈α⊃registers␈α⊃which␈α⊃serve␈α∩simultaneously␈α⊃ as␈α⊃accumulators␈α∩ (receiving␈α⊃the
␈↓ ↓H␈↓results␈αof␈αarithmetic␈αoperations),␈αindex␈αregisters␈α(modifying␈αthe␈αnominal␈αaddresses␈αof␈α instructions␈α to
␈↓ ↓H␈↓form␈α⊂effective␈α⊂addresses),␈α⊂and␈α∂as␈α⊂the␈α⊂first␈α⊂16␈α∂registers␈α⊂of␈α⊂memory␈α⊂(if␈α∂the␈α⊂effective␈α⊂address␈α⊂of␈α∂ an
␈↓ ↓H␈↓instruction␈α⊂ is␈α⊂ less␈α⊂ than␈α⊂ 16,␈α⊂ then␈α⊂ the␈α⊂instruction␈α⊂uses␈α⊂the␈α⊂corresponding␈α⊂general␈α⊂register␈α⊂as␈α∂its
␈↓ ↓H␈↓operand.)
␈↓ ↓H␈↓ All␈α
instructions␈α
have␈α
the␈α∞same␈α
format␈α
and␈α
are␈α
written␈α∞for␈α
the␈α
LAP␈α
assembly␈α
program␈α∞in␈α
the
␈↓ ↓H␈↓form
␈↓ ↓H␈↓ (<op name> <accumulator> <address> <index register>).
␈↓ ↓H␈↓Thus␈α
(MOVE␈α
1␈α
3␈α
P) ␈α
causes␈α
accumulator␈α∞ 1 ␈α
to␈α
receive␈α
the␈α
contents␈α
of␈α
a␈α
memory␈α∞ register␈α
whose
␈↓ ↓H␈↓address␈α
is␈α 3+c(P),␈α
i.e.␈α
3+<the␈αcontents␈α
of␈α
general␈αregister␈α
P>.␈α
If␈αno␈α
index␈α
register␈αis␈α
specified,␈αthen␈α
the
␈↓ ↓H␈↓address␈α⊂used␈α⊂is␈α⊂just␈α⊂<address>.␈α⊂ If␈α⊂the␈α⊂op␈α⊂name␈α⊂is␈α⊂followed␈α⊂by␈α⊂ @,␈α⊂then␈α⊂the␈α⊂memory␈α⊃reference␈α⊂is
␈↓ ↓H␈↓indirect,␈α
i.e.␈αthe␈α
effective␈αaddrress␈α
is␈αthe␈α
contents␈αof␈α
the␈αright␈α
half␈αof␈α
the␈αword␈α
directly␈α addressed␈α
by
␈↓ ↓H␈↓the␈α∂ instruction␈α∂(modified␈α∂ by␈α∂ the␈α∂index␈α∂register␈α∞and␈α∂indirect␈α∂bit␈α∂of␈α∂that␈α∂word).␈α∂ In␈α∂the␈α∞following
␈↓ ↓H␈↓description␈αof␈αsome␈αinstructions␈αuseful␈αin␈α
constructing␈αthe␈αcompiler,␈α<ef>␈αdenotes␈αthe␈αeffective␈α
address
␈↓ ↓H␈↓of an instruction.
␈↓ ↓H␈↓␈↓ αHMOVE ␈↓ ¬((ac) ← c(<ef>)
␈↓ ↓H␈↓␈↓ αHMOVEI ␈↓ ¬(c(ac) ← <ef>
␈↓ ↓H␈↓␈↓ αHMOVEM ␈↓ ¬(c(<ef>) ← c(ac)
␈↓ ↓H␈↓␈↓ αHHLRZ ␈↓ ¬(right half of c(ac) ← left half of c(<ef>)
␈↓ ↓H␈↓␈↓ αHHRRZ ␈↓ ¬(right half of c(ac) ← right half of c(<ef>)
␈↓ ↓H␈↓␈↓ αH␈↓ β8(These two are used indirectly for car and cdr respectively.)
␈↓ ↓H␈↓␈↓ αHADD ␈↓ ¬(c(ac) ← c(ac) + c(<ef>)
␈↓ ↓H␈↓␈↓ αHSUB ␈↓ ¬(c(ac) ← c(ac) - c(<ef>)
␈↓ ↓H␈↓␈↓ αHJRST ␈↓ ¬(go to <ef>
␈↓ ↓H␈↓␈↓ αHJUMPE ␈↓ ¬(if c(ac) ␈↓↓=␈↓ 0 then go to <ef>
␈↓ ↓H␈↓␈↓ αHJUMPN ␈↓ ¬(if c(ac) ␈↓↓≠␈↓ 0 then go to <ef>
␈↓ ↓H␈↓␈↓ αHCAME ␈↓ ¬(if c(ac) ␈↓↓=␈↓ c(<ef>) then <skip next instruction>
␈↓ ↓H␈↓␈↓ αHCAMN ␈↓ ¬(if c(ac) ␈↓↓≠␈↓ c(<ef>) then <skip next instruction>
␈↓ ↓H␈↓␈↓ αHPUSH ␈↓ ¬(c(c(right␈α
half␈α
of␈αac))␈α
←␈α
c(<ef>);␈αthe␈α
contents␈α
of␈αeach␈α
half
␈↓ ↓H␈↓␈↓ ¬(of␈αac␈αis␈αincreased␈αby␈αone␈αand␈αif␈αthe␈αcontents␈αof␈αthe␈αleft
␈↓ ↓H␈↓␈↓ ¬(half␈α∃is␈α∃then␈α⊗ 0,␈α∃a␈α∃stack␈α∃overflow␈α⊗interrupt␈α∃occurs.
␈↓ ↓H␈↓␈↓ ¬((PUSH␈α∂P␈α∂ac)␈α∂is␈α∂is␈α∂used␈α∂in␈α∂LISP␈α∂to␈α∂put␈α∂c(ac)␈α⊂on␈α∂the
␈↓ ↓H␈↓␈↓ ¬(stack.
␈↓ ↓H␈↓␈↓ αHPOP ␈↓ ¬(c(<ef>)␈α←c(c(right␈αhalf␈αof␈αac));␈αthe␈αcontents␈αof␈αeach␈αhalf
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ i3
␈↓ ↓H␈↓␈↓ ¬(of␈α
ac␈α
are␈α
then␈α
decreased␈α∞by␈α
1.␈α
This␈α
may␈α
be␈α∞used␈α
for
␈↓ ↓H␈↓␈↓ ¬(removing␈αthe␈α
top␈αelement␈αof␈α
the␈αstack.␈α Thus␈α
(POP␈αP
␈↓ ↓H␈↓␈↓ ¬(1)␈α
puts␈α
the␈α
top␈α∞element␈α
of␈α
the␈α
stack␈α
in␈α∞accumulator␈α
1.
␈↓ ↓H␈↓␈↓ ¬(The␈αi-th␈αelement␈αof␈αthe␈αstack␈αis␈αobtained␈αby␈α(MOVE@
␈↓ ↓H␈↓␈↓ ¬(1 i P).
␈↓ ↓H␈↓␈↓ αHPOPJ ␈↓ ¬((POPJ P) is used for returning from a subroutine
␈↓ ↓H␈↓ These␈α∩instructions␈α∩are␈α∩adequate␈α∩for␈α∩compiling␈α⊃basic␈α∩LISP␈α∩code␈α∩with␈α∩ the␈α∩addition␈α∩of␈α⊃the
␈↓ ↓H␈↓subroutine␈α
calling␈α
pseudo-instrucion.␈α
(CALL␈α
␈↓αn␈↓␈α
(E␈α
<subr)␈αS)␈α
is␈α
used␈α
for␈α
calling␈α
the␈α
LISP␈αsubroutine
␈↓ ↓H␈↓<subr>␈α⊃with␈α⊂ ␈↓αn␈↓␈α⊃arguments.␈α⊂ The␈α⊃ convention␈α⊃ is␈α⊂that␈α⊃the␈α⊂arguments␈α⊃will␈α⊂be␈α⊃stored␈α⊃in␈α⊂successive
␈↓ ↓H␈↓accumulators␈α∞beginning␈α∞with␈α∞accumulator␈α∞ 1,␈α∞and␈α
the␈α∞result␈α∞will␈α∞ be␈α∞ returned␈α∞ in␈α∞ accumulator␈α
1.
␈↓ ↓H␈↓In␈α∂particular␈α∂the␈α∞functions␈α∂ ATOM ␈α∂and␈α∂ CONS ␈α∞are␈α∂called␈α∂with␈α∂ (CALL␈α∞1␈α∂(E␈α∂ATOM)␈α∂S) ␈α∞and
␈↓ ↓H␈↓(CALL␈α∩2␈α⊃ (E␈α∩CONS)␈α⊃S)␈α∩ respectively,␈α⊃ and␈α∩ programs␈α⊃produced␈α∩by␈α⊃you␈α∩compiler␈α⊃will␈α∩be␈α⊃called
␈↓ ↓H␈↓similarly when their names are referred to.
␈↓ ↓H␈↓3. ␈↓βCode produced by LISP compilers.␈↓
␈↓ ↓H␈↓ I␈αhave␈α
written␈αtwo␈α
compilers,␈αthe␈α
simple␈α one␈α
called␈α LCOM0␈α
and␈αa␈α
more␈αoptimising␈α
compiler
␈↓ ↓H␈↓called␈αLCOM4.␈α Currently,␈αLCOM4␈αproduces␈αabout␈α
half␈α as␈αmany␈α instructions␈αfor␈αa␈αgiven␈α
function
␈↓ ↓H␈↓as␈αdoes␈α
LCOM0.␈αBesides␈α
these,␈αthere␈α
is␈αthe␈α
standard␈αPDP-10␈α
LISP␈α compiler␈α
written␈α at␈α M.I.T.␈α
by
␈↓ ↓H␈↓Richard Greenblatt and Stuart Nelson and modified by Whitfield Diffie.
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ i4
␈↓ ↓H␈↓Examples of output of LCOM0, LCOM4, and the regular Lisp compiler
␈↓ ↓H␈↓For the file containing:
␈↓ ↓H␈↓(DEFPROP DROP
␈↓ ↓H␈↓ (LAMBDA(X)
␈↓ ↓H␈↓ (COND ((NULL X) NIL) (T (CONS (LIST (CAR X)) (DROP (CDR X))))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓******************************************************************
␈↓ ↓H␈↓LCOM0 procuces the following code:
␈↓ ↓H␈↓(LAP DROP SUBR)
␈↓ ↓H␈↓(PUSH P 1)
␈↓ ↓H␈↓(MOVE 1 0 P)
␈↓ ↓H␈↓(PUSH P 1)
␈↓ ↓H␈↓(MOVE 1 0 P)
␈↓ ↓H␈↓(SUB P (C 1 0 1 0))
␈↓ ↓H␈↓(CALL 1 (E NULL) S)
␈↓ ↓H␈↓(JUMPE 1 G0163)
␈↓ ↓H␈↓(MOVEI 1 0)
␈↓ ↓H␈↓(JRST G0162)
␈↓ ↓H␈↓G0163
␈↓ ↓H␈↓(MOVEI 1 (QUOTE T))
␈↓ ↓H␈↓(JUMPE 1 G0164)
␈↓ ↓H␈↓(MOVE 1 0 P)
␈↓ ↓H␈↓(PUSH P 1)
␈↓ ↓H␈↓(MOVE 1 0 P)
␈↓ ↓H␈↓(SUB P (C 1 0 1 0))
␈↓ ↓H␈↓(CALL 1 (E CAR) S)
␈↓ ↓H␈↓(PUSH P 1)
␈↓ ↓H␈↓(MOVE 1 0 P)
␈↓ ↓H␈↓(SUB P (C 1 0 1 0))
␈↓ ↓H␈↓(CALL 1 (E LIST) S)
␈↓ ↓H␈↓(PUSH P 1)
␈↓ ↓H␈↓(MOVE 1 -1 P)
␈↓ ↓H␈↓(PUSH P 1)
␈↓ ↓H␈↓(MOVE 1 0 P)
␈↓ ↓H␈↓(SUB P (C 1 0 1 0))
␈↓ ↓H␈↓(CALL 1 (E CDR) S)
␈↓ ↓H␈↓(PUSH P 1)
␈↓ ↓H␈↓(MOVE 1 0 P)
␈↓ ↓H␈↓(SUB P (C 1 0 1 0))
␈↓ ↓H␈↓(CALL 1 (E DROP) S)
␈↓ ↓H␈↓(PUSH P 1)
␈↓ ↓H␈↓(MOVE 1 -1 P)
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ i5
␈↓ ↓H␈↓(MOVE 2 0 P)
␈↓ ↓H␈↓(SUB P (C 2 0 2 0))
␈↓ ↓H␈↓(CALL 2 (E CONS) S)
␈↓ ↓H␈↓(JRST G0162)
␈↓ ↓H␈↓G0164
␈↓ ↓H␈↓G0162
␈↓ ↓H␈↓(SUB P (C 1 0 1 0))
␈↓ ↓H␈↓(POPJ P)
␈↓ ↓H␈↓NIL
␈↓ ↓H␈↓LCOM4 produces the following code:
␈↓ ↓H␈↓(LAP DROP SUBR)
␈↓ ↓H␈↓(PUSH P 1)
␈↓ ↓H␈↓(MOVE 1 0 P)
␈↓ ↓H␈↓(JUMPE 1 G0162)
␈↓ ↓H␈↓(HLRZ@ 1 0 P)
␈↓ ↓H␈↓(CALL 1 (E LIST) S)
␈↓ ↓H␈↓(PUSH P 1)
␈↓ ↓H␈↓(HRRZ@ 1 -1 P)
␈↓ ↓H␈↓(CALL 1 (E DROP) S)
␈↓ ↓H␈↓(MOVE 2 1)
␈↓ ↓H␈↓(MOVE 1 0 P)
␈↓ ↓H␈↓(SUB P (C 1 0 1 0))
␈↓ ↓H␈↓(CALL 2 (E CONS) S)
␈↓ ↓H␈↓G0162
␈↓ ↓H␈↓(SUB P (C 1 0 1 0))
␈↓ ↓H␈↓(POPJ P)
␈↓ ↓H␈↓NIL
␈↓ ↓H␈↓******************************************************************
␈↓ ↓H␈↓ILISP COMPILER produces the following code:
␈↓ ↓H␈↓(LAP DROP SUBR)
␈↓ ↓H␈↓ (PUSH P 1)
␈↓ ↓H␈↓ (JUMPE 1 TAG1)
␈↓ ↓H␈↓ (HLRZ@ 1 0 P)
␈↓ ↓H␈↓ (CALL 1 (E NCONS) S)
␈↓ ↓H␈↓ (PUSH P 1)
␈↓ ↓H␈↓ (HRRZ@ 1 -1 P)
␈↓ ↓H␈↓ (CALL 1 (E DROP) S)
␈↓ ↓H␈↓ (POP P 2)
␈↓ ↓H␈↓ (CALL 2 (E XCONS) S)
␈↓ ↓H␈↓ TAG1 (SUB P (C 1 0 1 0))
␈↓ ↓H␈↓ (POPJ P)
␈↓ ↓H␈↓ NIL
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ i6
␈↓ ↓H␈↓ Note␈α that␈αall␈αthree␈αcompilers␈αproduce␈αthe␈αsame␈αfirst␈αline␈αof␈αheading.␈α This␈αis␈αnecessary␈αfor␈αthe
␈↓ ↓H␈↓LAP␈α∞assembly␈α
program␈α∞ which␈α∞ also␈α
requires␈α∞ the␈α∞ NIL ␈α
at␈α∞the␈α∞end␈α
as␈α∞punctuation.␈α∞ The␈α
standard
␈↓ ↓H␈↓compiler␈α∂uses␈α∂a␈α∂function␈α∂called␈α∂ XCONS ␈α∂that␈α∂has␈α∂ the␈α∂ same␈α∂ effect␈α∂ as␈α∂ CONS ␈α∂except␈α∂ that␈α∂ it
␈↓ ↓H␈↓receives␈α
its␈αarguments␈α
in␈αthe␈α
reverse␈αorder␈α
which␈αis␈α
sometimes␈αconvenient.␈α
This␈αrequires,␈α
of␈αcourse,
␈↓ ↓H␈↓that␈αthe␈αcompiler␈αbe␈αsmart␈α enough␈α to␈α decide␈α where␈α it␈α is␈α more␈α convenient␈αto␈αput␈αthe␈αarguments
␈↓ ↓H␈↓of the ␈↓αcons␈↓ function.
␈↓ ↓H␈↓ My␈α two␈α
compilers␈α are␈α
similar␈αin␈α
structure,␈αbut␈α
the␈αbetter␈α
one,␈αwhich␈α
is␈αtwice␈α
as␈αlong,␈αuses␈α
the
␈↓ ↓H␈↓following optimisations.
␈↓ ↓H␈↓ 1.␈α⊂When␈α⊂the␈α⊂argument␈α⊂of␈α⊂CAR␈α⊂or␈α⊂CDR␈α⊂is␈α⊂a␈α⊂variable,␈α⊂it␈α⊂compiles␈α⊂a␈α⊂ (HLRZ@␈α⊂ 1␈α⊂ i␈α⊃P)␈α⊂or
␈↓ ↓H␈↓(HRRZ@␈α1␈αi␈αP)␈αwhich␈αgets␈αthe␈αresult␈αthrough␈αthe␈αstack␈αwithout␈αfirst␈αcompiling␈αthe␈αargument␈αinto␈αan
␈↓ ↓H␈↓accumulator.
␈↓ ↓H␈↓ 2.␈α∞When␈α∞it␈α∞has␈α∞to␈α∞set␈α∞up␈α∞the␈α∂arguments␈α∞of␈α∞a␈α∞function␈α∞ in␈α∞ the␈α∞accumulators,␈α∞ in␈α∂general,␈α∞the
␈↓ ↓H␈↓program␈α
must␈αcompute␈α
the␈α
arguments␈αone␈α
at␈αa␈α
time␈α
and␈αsave␈α
them␈αon␈α
the␈α
stack,␈αand␈α
then␈α
load␈αthe
␈↓ ↓H␈↓accumulators␈αfrom␈αthe␈αstack.␈α However,␈αif␈αone␈αof␈αthe␈αarguments␈αis␈αa␈αvariable,␈αis␈αa␈αquoted␈αexpression,
␈↓ ↓H␈↓or␈αcan␈α
be␈αobtained␈αfrom␈α
a␈αvariable␈αby␈α
a␈α chain␈α
of␈α cars ␈α and␈α
cdrs,␈α then␈α it␈α
need␈αnot␈αbe␈α
computed
␈↓ ↓H␈↓until␈αthe␈αtime␈αof␈αloading␈α accumulators␈α since␈α it␈α can␈α be␈α computed␈α using␈α only␈α the␈αaccumulator␈αin
␈↓ ↓H␈↓which it is wanted.
␈↓ ↓H␈↓ 3.␈α∀ The␈α∀ Diffy␈α∀ compiler␈α∃ produces␈α∀about␈α∀10␈α∀percent␈α∃less␈α∀code␈α∀than␈α∀LCOM4;␈α∃the␈α∀main
␈↓ ↓H␈↓difference␈α
seems␈αto␈α
be␈αthat␈α
it␈α
sometimes␈αnotices␈α
when␈α it␈α
has␈α
an␈α expression␈α
that␈αit␈α
will␈α
need␈αlater.
␈↓ ↓H␈↓Sometimes␈αthis␈α
feature␈αleads␈α
it␈αastray.␈α
For␈αexample,␈α
it␈αmay␈α
save␈α ␈↓βa␈α
␈↓αu␈↓ ␈αfor␈α
later␈αuse␈α
at␈αgreater␈αcost␈α
than
␈↓ ↓H␈↓re-computing it.
␈↓ ↓H␈↓ It should further be noted that quoted S-expressions can be compiled with the instruction
␈↓ ↓H␈↓ (MOVEI 1 (QUOTE α)).
␈↓ ↓H␈↓4. ␈↓βListings of LCOM0 and LCOM4␈↓
␈↓ ↓H␈↓ First␈αare␈αlistings␈αof␈αboth␈αcompilers␈αin␈αblackboard␈αnotation.␈α Following␈αthese␈αis␈αan␈αan␈αannotated
␈↓ ↓H␈↓listing of LCOM0 in S-expression notation, and a listing of LCOM4 in that notation.
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ i7
␈↓ ↓H␈↓LCOM0:
␈↓ ↓H␈↓␈↓ ↓x␈↓αcompl␈↓↓ ␈↓αfile␈↓↓ (␈↓∧FEXPR␈↓↓) ←
␈↓ ↓H␈↓↓␈↓ α_␈↓βprog␈↓↓ [␈↓αz␈↓↓]
␈↓ ↓H␈↓↓␈↓ αa␈↓αeval␈↓↓ ␈↓∧OUTPUT␈↓↓ . [ `␈↓∧DSK:␈↓↓' . <␈↓βa ␈↓αfile␈↓↓ . ␈↓∧LAP␈↓↓>]
␈↓ ↓H␈↓↓␈↓ αa␈↓αeval␈↓↓ ␈↓∧INPUT␈↓↓ . [ `␈↓∧DSK:␈↓↓' . ␈↓αfile␈↓↓]
␈↓ ↓H␈↓↓␈↓ αa␈↓αinc␈↓↓[␈↓∧T␈↓↓, ␈↓∧NIL␈↓↓]
␈↓ ↓H␈↓↓␈↓ αa␈↓αoutc␈↓↓[␈↓∧T␈↓↓, ␈↓∧NIL␈↓↓]
␈↓ ↓H␈↓↓␈↓ α#␈↓αloop␈↓↓ ␈↓αz␈↓↓ ← ␈↓αerrset␈↓↓ ␈↓αread␈↓↓[]
␈↓ ↓H␈↓↓␈↓ αa␈↓βif␈↓↓ ␈↓βat ␈↓αz␈↓↓ ␈↓βthen␈↓↓ ␈↓αgo␈↓↓ ␈↓αdone␈↓↓ ␈↓βelse if␈↓↓ ␈↓∧T␈↓↓ ␈↓βthen␈↓↓ ␈↓∧NIL
␈↓ ↓H␈↓∧␈↓ αa␈↓αz␈↓↓ ← ␈↓βa ␈↓αz
␈↓ ↓H␈↓α␈↓ αa␈↓βif␈↓↓ ␈↓βa ␈↓αz␈↓↓ ␈↓βeq ␈↓∧DE␈↓↓ ␈↓βthen␈↓↓
␈↓ ↓H␈↓↓␈↓ β↓[␈↓βprog␈↓↓ [␈↓αprog␈↓↓]
␈↓ ↓H␈↓↓␈↓ βS␈↓αprog␈↓↓ ← ␈↓αcomp␈↓↓[␈↓βad ␈↓αz␈↓↓, ␈↓βadd ␈↓αz␈↓↓, ␈↓βaddd ␈↓αz␈↓↓]
␈↓ ↓H␈↓↓␈↓ βS␈↓αmapc␈↓↓[␈↓αprint␈↓↓, ␈↓αprog␈↓↓]
␈↓ ↓H␈↓↓␈↓ βS␈↓αoutc␈↓↓[␈↓∧NIL␈↓↓, ␈↓∧NIL␈↓↓]
␈↓ ↓H␈↓↓␈↓ βS␈↓αprint␈↓↓ <␈↓βad ␈↓αz␈↓↓, ␈↓αlength␈↓↓ ␈↓αprog␈↓↓>
␈↓ ↓H␈↓↓␈↓ βS␈↓αoutc␈↓↓[␈↓∧T␈↓↓, ␈↓∧NIL␈↓↓]]
␈↓ ↓H␈↓↓␈↓ αq␈↓βelse␈↓↓ ␈↓αprint␈↓↓ ␈↓αz
␈↓ ↓H␈↓α␈↓ αago␈↓↓ ␈↓αloop
␈↓ ↓H␈↓α␈↓ α≥done␈↓↓ ␈↓αoutc␈↓↓[␈↓∧NIL␈↓↓, ␈↓∧T␈↓↓]
␈↓ ↓H␈↓↓␈↓ αa␈↓αinc␈↓↓[␈↓∧NIL␈↓↓, ␈↓∧T␈↓↓]
␈↓ ↓H␈↓↓␈↓ αa␈↓αreturn␈↓↓ ␈↓∧ENDCOMP
␈↓ ↓H␈↓∧␈↓ ↓x␈↓αcomp␈↓↓[␈↓αfn␈↓↓, ␈↓αvars␈↓↓, ␈↓αexp␈↓↓] ←
␈↓ ↓H␈↓↓␈↓ α_{␈↓αlength␈↓↓ ␈↓αvars␈↓↓}[λ␈↓αn␈↓↓.
␈↓ ↓H␈↓↓␈↓ α8<<␈↓∧LAP␈↓↓, ␈↓αfn␈↓↓, ␈↓∧SUBR␈↓↓>>
␈↓ ↓H␈↓↓␈↓ α8* ␈↓αmkpush␈↓↓[␈↓αn␈↓↓, ␈↓∧1␈↓↓]
␈↓ ↓H␈↓↓␈↓ α8* ␈↓αcompexp␈↓↓[␈↓αexp␈↓↓, -␈↓αn␈↓↓, ␈↓αprup␈↓↓[␈↓αvars␈↓↓, ␈↓∧1␈↓↓]]
␈↓ ↓H␈↓↓␈↓ α8* <<␈↓∧SUB␈↓↓, ␈↓∧P␈↓↓, <␈↓∧C␈↓↓, ␈↓αn␈↓↓, ␈↓∧0␈↓↓, ␈↓αn␈↓↓, ␈↓∧0␈↓↓>>>
␈↓ ↓H␈↓↓␈↓ α8* ((␈↓∧POPJ␈↓↓ ␈↓∧P␈↓↓) ␈↓∧NIL␈↓↓)]
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αprup␈↓↓[␈↓αvars␈↓↓, ␈↓αn␈↓↓] ← ␈↓βif␈↓↓ ␈↓βn ␈↓αvars␈↓↓ ␈↓βthen␈↓↓ ␈↓∧NIL␈↓↓ ␈↓βelse␈↓↓ [␈↓βa ␈↓αvars␈↓↓ . ␈↓αn␈↓↓] . ␈↓αprup␈↓↓[␈↓βd ␈↓αvars␈↓↓, ␈↓αn␈↓↓ + ␈↓∧1␈↓↓]
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αmkpush␈↓↓[␈↓αn␈↓↓, ␈↓αm␈↓↓] ← ␈↓βif␈↓↓ ␈↓αn␈↓↓ < ␈↓αm␈↓↓ ␈↓βthen␈↓↓ ␈↓∧NIL␈↓↓ ␈↓βelse␈↓↓ <␈↓∧PUSH␈↓↓, ␈↓∧P␈↓↓, ␈↓αm␈↓↓> . ␈↓αmkpush␈↓↓[␈↓αn␈↓↓, ␈↓αm␈↓↓ + ␈↓∧1␈↓↓]
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αcompexp␈↓↓[␈↓αexp␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓] ←
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ i8
␈↓ ↓H␈↓↓␈↓ α_␈↓βif␈↓↓ ␈↓βn ␈↓αexp␈↓↓ ␈↓βthen␈↓↓ ((␈↓∧MOVEI␈↓↓ ␈↓∧1␈↓↓ ␈↓∧0␈↓↓))
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓αexp␈↓↓ ␈↓βeq ␈↓∧T␈↓↓ ␈↓βthen␈↓↓ ((␈↓∧MOVEI␈↓↓ ␈↓∧1␈↓↓ (␈↓∧QUOTE␈↓↓ ␈↓∧T␈↓↓)))
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βat ␈↓αexp␈↓↓ ␈↓βthen␈↓↓ <<␈↓∧MOVE␈↓↓, ␈↓∧1␈↓↓, ␈↓αm␈↓↓ + ␈↓βd ␈↓αassoc␈↓↓[␈↓αexp␈↓↓, ␈↓αvpr␈↓↓], ␈↓∧P␈↓↓>>
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βa ␈↓αexp␈↓↓ ␈↓βeq ␈↓∧AND␈↓↓ ∨ ␈↓βa ␈↓αexp␈↓↓ ␈↓βeq ␈↓∧OR␈↓↓ ∨ ␈↓βa ␈↓αexp␈↓↓ ␈↓βeq ␈↓∧NOT␈↓↓ ␈↓βthen␈↓↓
␈↓ ↓H␈↓↓␈↓ α8{␈↓αgensym␈↓↓[], ␈↓αgensym␈↓↓[]}[λ␈↓αl1␈↓↓, ␈↓αl2␈↓↓.
␈↓ ↓H␈↓↓␈↓ αX␈↓αcombool␈↓↓[␈↓αexp␈↓↓, ␈↓αm␈↓↓, ␈↓αl1␈↓↓, ␈↓∧NIL␈↓↓, ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓↓␈↓ αX* <(␈↓∧MOVEI␈↓↓ ␈↓∧1␈↓↓ (␈↓∧QUOTE␈↓↓ ␈↓∧T␈↓↓)), <␈↓∧JRST␈↓↓, ␈↓∧0␈↓↓, ␈↓αl2␈↓↓>, ␈↓αl1␈↓↓, (␈↓∧MOVEI␈↓↓ ␈↓∧1␈↓↓ ␈↓∧0␈↓↓), ␈↓αl2␈↓↓>]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βa ␈↓αexp␈↓↓ ␈↓βeq ␈↓∧COND␈↓↓ ␈↓βthen␈↓↓ ␈↓αcomcond␈↓↓[␈↓βd ␈↓αexp␈↓↓, ␈↓αm␈↓↓, ␈↓αgensym␈↓↓[], ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βa ␈↓αexp␈↓↓ ␈↓βeq ␈↓∧QUOTE␈↓↓ ␈↓βthen␈↓↓ <<␈↓∧MOVEI␈↓↓, ␈↓∧1␈↓↓, ␈↓αexp␈↓↓>>
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βat a ␈↓αexp␈↓↓ ␈↓βthen␈↓↓
␈↓ ↓H␈↓↓␈↓ α8{␈↓αlength␈↓↓ ␈↓βd ␈↓αexp␈↓↓}[λ␈↓αn␈↓↓.
␈↓ ↓H␈↓↓␈↓ αX␈↓αcomplis␈↓↓[␈↓βd ␈↓αexp␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓↓␈↓ αX* ␈↓αloadac␈↓↓[␈↓∧1␈↓↓ - ␈↓αn␈↓↓, ␈↓∧1␈↓↓]
␈↓ ↓H␈↓↓␈↓ αX* <<␈↓∧SUB␈↓↓, ␈↓∧P␈↓↓, <␈↓∧C␈↓↓, ␈↓αn␈↓↓, ␈↓∧0␈↓↓, ␈↓αn␈↓↓, ␈↓∧0␈↓↓>>>
␈↓ ↓H␈↓↓␈↓ αX* <<␈↓∧CALL␈↓↓, ␈↓αn␈↓↓, <␈↓∧E␈↓↓, ␈↓βa ␈↓αexp␈↓↓>, ␈↓∧S␈↓↓>>]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βaa ␈↓αexp␈↓↓ ␈↓βeq ␈↓∧LAMBDA␈↓↓ ␈↓βthen␈↓↓
␈↓ ↓H␈↓↓␈↓ α8{␈↓αlength␈↓↓ ␈↓βd ␈↓αexp␈↓↓}[λ␈↓αn␈↓↓.
␈↓ ↓H␈↓↓␈↓ αX␈↓αcomplis␈↓↓[␈↓βd ␈↓αexp␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓↓␈↓ αX* ␈↓αcompexp␈↓↓[␈↓βadda ␈↓αexp␈↓↓, ␈↓αm␈↓↓ - ␈↓αn␈↓↓, ␈↓αprup␈↓↓[␈↓βada ␈↓αexp␈↓↓, ␈↓∧1␈↓↓ - ␈↓αm␈↓↓] * ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓↓␈↓ αX* <<␈↓∧SUB␈↓↓, ␈↓∧P␈↓↓, <␈↓∧C␈↓↓, ␈↓αn␈↓↓, ␈↓∧0␈↓↓, ␈↓αn␈↓↓, ␈↓∧0␈↓↓>>>]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓∧T␈↓↓ ␈↓βthen␈↓↓ ␈↓∧NIL
␈↓ ↓H␈↓∧␈↓ ↓x␈↓αcomplis␈↓↓[␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓] ←
␈↓ ↓H␈↓↓␈↓ α_␈↓βif␈↓↓ ␈↓βn ␈↓αu␈↓↓ ␈↓βthen␈↓↓ ␈↓∧NIL␈↓↓ ␈↓βelse␈↓↓ ␈↓αcompexp␈↓↓[␈↓βa ␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓] * ((␈↓∧PUSH␈↓↓ ␈↓∧P␈↓↓ ␈↓∧1␈↓↓)) * ␈↓αcomplis␈↓↓[␈↓βd ␈↓αu␈↓↓, ␈↓αm␈↓↓ - ␈↓∧1␈↓↓, ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αloadac␈↓↓[␈↓αn␈↓↓, ␈↓αk␈↓↓] ← ␈↓βif␈↓↓ ␈↓αn␈↓↓ > ␈↓∧0␈↓↓ ␈↓βthen␈↓↓ ␈↓∧NIL␈↓↓ ␈↓βelse␈↓↓ <␈↓∧MOVE␈↓↓, ␈↓αk␈↓↓, ␈↓αn␈↓↓, ␈↓∧P␈↓↓> . ␈↓αloadac␈↓↓[␈↓αn␈↓↓ + ␈↓∧1␈↓↓, ␈↓αk␈↓↓ + ␈↓∧1␈↓↓]
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αcomcond␈↓↓[␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αl␈↓↓, ␈↓αvpr␈↓↓] ←
␈↓ ↓H␈↓↓␈↓ α_␈↓βif␈↓↓ ␈↓βn ␈↓αu␈↓↓ ␈↓βthen␈↓↓ <␈↓αl␈↓↓>
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse␈↓↓ {␈↓αgensym␈↓↓[]}[λ␈↓αl1␈↓↓.
␈↓ ↓H␈↓↓␈↓ α8␈↓αcombool␈↓↓[␈↓βaa ␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αl1␈↓↓, ␈↓∧NIL␈↓↓, ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓↓␈↓ α8* ␈↓αcompexp␈↓↓[␈↓βada ␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓↓␈↓ α8* <<␈↓∧JRST␈↓↓, ␈↓αl␈↓↓>, ␈↓αl1␈↓↓>
␈↓ ↓H␈↓↓␈↓ α8* ␈↓αcomcond␈↓↓[␈↓βd ␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αl␈↓↓, ␈↓αvpr␈↓↓]]
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αcombool␈↓↓[␈↓αp␈↓↓, ␈↓αm␈↓↓, ␈↓αl␈↓↓, ␈↓αflg␈↓↓, ␈↓αvpr␈↓↓] ←
␈↓ ↓H␈↓↓␈↓ α_␈↓βif␈↓↓ ␈↓βat ␈↓αp␈↓↓ ␈↓βthen␈↓↓ [␈↓αcompexp␈↓↓[␈↓αp␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓] * <<␈↓βif␈↓↓ ␈↓αflg␈↓↓ ␈↓βthen␈↓↓ ␈↓∧JUMPN␈↓↓ ␈↓βelse␈↓↓ ␈↓∧JUMPE␈↓↓, ␈↓∧1␈↓↓, ␈↓αl␈↓↓>>]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βa ␈↓αp␈↓↓ ␈↓βeq ␈↓∧AND␈↓↓ ␈↓βthen␈↓↓
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ i9
␈↓ ↓H␈↓↓␈↓ α8[␈↓βif␈↓↓ ¬␈↓αflg␈↓↓ ␈↓βthen␈↓↓ ␈↓αcompandor␈↓↓[␈↓βd ␈↓αp␈↓↓, ␈↓αm␈↓↓, ␈↓αl␈↓↓, ␈↓∧NIL␈↓↓, ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓↓␈↓ αA␈↓βelse␈↓↓ {␈↓αgensym␈↓↓[]}[λ␈↓αl1␈↓↓. ␈↓αcompandor␈↓↓[␈↓βd ␈↓αp␈↓↓, ␈↓αm␈↓↓, ␈↓αl1␈↓↓, ␈↓∧NIL␈↓↓, ␈↓αvpr␈↓↓] * <<␈↓∧JRST␈↓↓, ␈↓∧0␈↓↓, ␈↓αl␈↓↓>> * <␈↓αl1␈↓↓>]]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βa ␈↓αp␈↓↓ ␈↓βeq ␈↓∧OR␈↓↓ ␈↓βthen␈↓↓
␈↓ ↓H␈↓↓␈↓ α8[␈↓βif␈↓↓ ␈↓αflg␈↓↓ ␈↓βthen␈↓↓ ␈↓αcompandor␈↓↓[␈↓βd ␈↓αp␈↓↓, ␈↓αm␈↓↓, ␈↓αl␈↓↓, ␈↓∧T␈↓↓, ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓↓␈↓ αA␈↓βelse␈↓↓ {␈↓αgensym␈↓↓[]}[λ␈↓αl1␈↓↓. ␈↓αcompandor␈↓↓[␈↓βd ␈↓αp␈↓↓, ␈↓αm␈↓↓, ␈↓αl1␈↓↓, ␈↓∧T␈↓↓, ␈↓αvpr␈↓↓] * <<␈↓∧JRST␈↓↓, ␈↓∧0␈↓↓, ␈↓αl␈↓↓>> * <␈↓αl1␈↓↓>]]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βa ␈↓αp␈↓↓ ␈↓βeq ␈↓∧NOT␈↓↓ ␈↓βthen␈↓↓ ␈↓αcombool␈↓↓[␈↓βad ␈↓αp␈↓↓, ␈↓αm␈↓↓, ␈↓αl␈↓↓, ¬␈↓αflg␈↓↓, ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse␈↓↓ ␈↓αcompexp␈↓↓[␈↓αp␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓] * <<␈↓βif␈↓↓ ␈↓αflg␈↓↓ ␈↓βthen␈↓↓ ␈↓∧JUMPN␈↓↓ ␈↓βelse␈↓↓ ␈↓∧JUMPE␈↓↓, ␈↓∧1␈↓↓, ␈↓αl␈↓↓>>
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αcompandor␈↓↓[␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αl␈↓↓, ␈↓αflg␈↓↓, ␈↓αvpr␈↓↓] ←
␈↓ ↓H␈↓↓␈↓ α_␈↓βif␈↓↓ ␈↓βn ␈↓αu␈↓↓ ␈↓βthen␈↓↓ ␈↓∧NIL␈↓↓ ␈↓βelse␈↓↓ ␈↓αcombool␈↓↓[␈↓βa ␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αl␈↓↓, ␈↓αflg␈↓↓, ␈↓αvpr␈↓↓] * ␈↓αcompandor␈↓↓[␈↓βd ␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αl␈↓↓, ␈↓αflg␈↓↓, ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ Z10
␈↓ ↓H␈↓LCOM4:
␈↓ ↓H␈↓␈↓ ↓x␈↓αcompl␈↓↓ ␈↓αfile␈↓↓ (␈↓∧FEXPR␈↓↓) ←
␈↓ ↓H␈↓↓␈↓ α_␈↓βprog␈↓↓ [␈↓αz␈↓↓]
␈↓ ↓H␈↓↓␈↓ αa␈↓αeval␈↓↓ ␈↓∧OUTPUT␈↓↓ . [ `␈↓∧DSK:␈↓↓' . <␈↓βa ␈↓αfile␈↓↓ . ␈↓∧LAP␈↓↓>]
␈↓ ↓H␈↓↓␈↓ αa␈↓αeval␈↓↓ ␈↓∧INPUT␈↓↓ . [ `␈↓∧DSK:␈↓↓' . ␈↓αfile␈↓↓]
␈↓ ↓H␈↓↓␈↓ αa␈↓αinc␈↓↓[␈↓∧T␈↓↓, ␈↓∧NIL␈↓↓]
␈↓ ↓H␈↓↓␈↓ αa␈↓αoutc␈↓↓[␈↓∧T␈↓↓, ␈↓∧NIL␈↓↓]
␈↓ ↓H␈↓↓␈↓ α#␈↓αloop␈↓↓ ␈↓αz␈↓↓ ← ␈↓αerrset␈↓↓ ␈↓αread␈↓↓[]
␈↓ ↓H␈↓↓␈↓ αa␈↓βif␈↓↓ ␈↓βat ␈↓αz␈↓↓ ␈↓βthen␈↓↓ ␈↓αgo␈↓↓ ␈↓αdone␈↓↓ ␈↓βelse if␈↓↓ ␈↓∧T␈↓↓ ␈↓βthen␈↓↓ ␈↓∧NIL
␈↓ ↓H␈↓∧␈↓ αa␈↓αz␈↓↓ ← ␈↓βa ␈↓αz
␈↓ ↓H␈↓α␈↓ αa␈↓βif␈↓↓ ␈↓βa ␈↓αz␈↓↓ ␈↓βeq ␈↓∧DE␈↓↓ ∨ [␈↓βa ␈↓αz␈↓↓ ␈↓βeq ␈↓∧DEFPROP␈↓↓ ∧ ␈↓βaddd ␈↓αz␈↓↓ ␈↓βeq ␈↓∧EXPR␈↓↓] ␈↓βthen␈↓↓
␈↓ ↓H␈↓↓␈↓ β↓[␈↓βprog␈↓↓ [␈↓αprog␈↓↓]
␈↓ ↓H␈↓↓␈↓ βS␈↓αprog
␈↓ ↓H␈↓α␈↓ βc␈↓↓← [␈↓βif␈↓↓ ␈↓βa ␈↓αz␈↓↓ ␈↓βeq ␈↓∧DE␈↓↓ ␈↓βthen␈↓↓ ␈↓αcomp␈↓↓[␈↓βad ␈↓αz␈↓↓, ␈↓βadd ␈↓αz␈↓↓, ␈↓βaddd ␈↓αz␈↓↓]
␈↓ ↓H␈↓↓␈↓ ∧ ␈↓βelse␈↓↓ ␈↓αcomp␈↓↓[␈↓βad ␈↓αz␈↓↓, ␈↓βad add ␈↓αz␈↓↓, ␈↓βadd add ␈↓αz␈↓↓]]
␈↓ ↓H␈↓↓␈↓ βS␈↓αmapc␈↓↓[␈↓αprint␈↓↓, ␈↓αprog␈↓↓]
␈↓ ↓H␈↓↓␈↓ βS␈↓αoutc␈↓↓[␈↓∧NIL␈↓↓, ␈↓∧NIL␈↓↓]
␈↓ ↓H␈↓↓␈↓ βS␈↓αprint␈↓↓ <␈↓βad ␈↓αz␈↓↓, ␈↓αlength␈↓↓ ␈↓αprog␈↓↓>
␈↓ ↓H␈↓↓␈↓ βS␈↓αoutc␈↓↓[␈↓∧T␈↓↓, ␈↓∧NIL␈↓↓]]
␈↓ ↓H␈↓↓␈↓ αq␈↓βelse␈↓↓ ␈↓αprint␈↓↓ ␈↓αz
␈↓ ↓H␈↓α␈↓ αago␈↓↓ ␈↓αloop
␈↓ ↓H␈↓α␈↓ α≥done␈↓↓ ␈↓αoutc␈↓↓[␈↓∧NIL␈↓↓, ␈↓∧T␈↓↓]
␈↓ ↓H␈↓↓␈↓ αa␈↓αinc␈↓↓[␈↓∧NIL␈↓↓, ␈↓∧T␈↓↓]
␈↓ ↓H␈↓↓␈↓ αa␈↓αreturn␈↓↓ ␈↓∧ENDCOMP
␈↓ ↓H␈↓∧␈↓ ↓x␈↓αcomp␈↓↓[␈↓αfn␈↓↓, ␈↓αvars␈↓↓, ␈↓αexp␈↓↓] ←
␈↓ ↓H␈↓↓␈↓ α_{␈↓αprup␈↓↓[␈↓αvars␈↓↓, ␈↓∧1␈↓↓], ␈↓αlength␈↓↓ ␈↓αvars␈↓↓}[λ␈↓αvpr␈↓↓, ␈↓αn␈↓↓.
␈↓ ↓H␈↓↓␈↓ α8␈↓αflat␈↓↓[<<<␈↓∧LAP␈↓↓, ␈↓αfn␈↓↓, ␈↓∧SUBR␈↓↓>>,
␈↓ ↓H␈↓↓␈↓ β↓␈↓αmkpush␈↓↓[␈↓αn␈↓↓, ␈↓∧1␈↓↓],
␈↓ ↓H␈↓↓␈↓ β↓␈↓αcompexp␈↓↓[␈↓αexp␈↓↓, -␈↓αn␈↓↓, ␈↓αvpr␈↓↓],
␈↓ ↓H␈↓↓␈↓ β↓␈↓αsubstack␈↓↓ ␈↓αn␈↓↓,
␈↓ ↓H␈↓↓␈↓ β↓((␈↓∧POPJ␈↓↓ ␈↓∧P␈↓↓) (␈↓∧LABEL␈↓↓ ␈↓∧NIL␈↓↓))>,
␈↓ ↓H␈↓↓␈↓ αo␈↓∧NIL␈↓↓]]
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αsubstack␈↓↓ ␈↓αn␈↓↓ ← ␈↓βif␈↓↓ ␈↓αn␈↓↓ ␈↓βeq ␈↓∧0␈↓↓ ␈↓βthen␈↓↓ ␈↓∧NIL␈↓↓ ␈↓βelse␈↓↓ <<␈↓∧SUB␈↓↓, ␈↓∧P␈↓↓, <␈↓∧C␈↓↓, ␈↓αn␈↓↓, ␈↓∧0␈↓↓, ␈↓αn␈↓↓, ␈↓∧0␈↓↓>>>
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αprup␈↓↓[␈↓αvars␈↓↓, ␈↓αn␈↓↓] ← ␈↓βif␈↓↓ ␈↓βn ␈↓αvars␈↓↓ ␈↓βthen␈↓↓ ␈↓∧NIL␈↓↓ ␈↓βelse␈↓↓ [␈↓βa ␈↓αvars␈↓↓ . ␈↓αn␈↓↓] . ␈↓αprup␈↓↓[␈↓βd ␈↓αvars␈↓↓, ␈↓αn␈↓↓ + ␈↓∧1␈↓↓]
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ Z11
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αmkpush␈↓↓[␈↓αn␈↓↓, ␈↓αm␈↓↓] ← ␈↓βif␈↓↓ ␈↓αn␈↓↓ < ␈↓αm␈↓↓ ␈↓βthen␈↓↓ ␈↓∧NIL␈↓↓ ␈↓βelse␈↓↓ <␈↓∧PUSH␈↓↓, ␈↓∧P␈↓↓, ␈↓αm␈↓↓> . ␈↓αmkpush␈↓↓[␈↓αn␈↓↓, ␈↓αm␈↓↓ + ␈↓∧1␈↓↓]
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αcompexp␈↓↓[␈↓αexp␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓] ←
␈↓ ↓H␈↓↓␈↓ α_␈↓βif␈↓↓ ␈↓βn ␈↓αexp␈↓↓ ␈↓βthen␈↓↓ ((␈↓∧MOVEI␈↓↓ ␈↓∧1␈↓↓ ␈↓∧0␈↓↓))
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓αexp␈↓↓ ␈↓βeq ␈↓∧T␈↓↓ ∨ ␈↓αnumberp␈↓↓ ␈↓αexp␈↓↓ ␈↓βthen␈↓↓ <<␈↓∧MOVEI␈↓↓, ␈↓∧1␈↓↓, <␈↓∧QUOTE␈↓↓, ␈↓αexp␈↓↓>>>
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βat ␈↓αexp␈↓↓ ␈↓βthen␈↓↓ <<␈↓∧MOVE␈↓↓, ␈↓∧1␈↓↓, ␈↓αm␈↓↓ + ␈↓βd ␈↓αassoc␈↓↓[␈↓αexp␈↓↓, ␈↓αvpr␈↓↓], ␈↓∧P␈↓↓>>
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βa ␈↓αexp␈↓↓ ␈↓βeq ␈↓∧CAR␈↓↓ ␈↓βthen␈↓↓
␈↓ ↓H␈↓↓␈↓ α8[␈↓βif␈↓↓ ␈↓βat ad ␈↓αexp␈↓↓ ␈↓βthen␈↓↓ << `␈↓∧HLRZ@␈↓↓' , ␈↓∧1␈↓↓, ␈↓αm␈↓↓ + ␈↓βd ␈↓αassoc␈↓↓[␈↓βad ␈↓αexp␈↓↓, ␈↓αvpr␈↓↓], ␈↓∧P␈↓↓>>
␈↓ ↓H␈↓↓␈↓ αA␈↓βelse␈↓↓ <␈↓αcompexp␈↓↓[␈↓βad ␈↓αexp␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓], (( `␈↓∧HLRZ@␈↓↓' ␈↓∧1␈↓↓ ␈↓∧1␈↓↓))>]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βa ␈↓αexp␈↓↓ ␈↓βeq ␈↓∧CDR␈↓↓ ␈↓βthen␈↓↓
␈↓ ↓H␈↓↓␈↓ α8[␈↓βif␈↓↓ ␈↓βat ad ␈↓αexp␈↓↓ ␈↓βthen␈↓↓ << `␈↓∧HRRZ@␈↓↓' , ␈↓∧1␈↓↓, ␈↓αm␈↓↓ + ␈↓βd ␈↓αassoc␈↓↓[␈↓βad ␈↓αexp␈↓↓, ␈↓αvpr␈↓↓], ␈↓∧P␈↓↓>>
␈↓ ↓H␈↓↓␈↓ αA␈↓βelse␈↓↓ <␈↓αcompexp␈↓↓[␈↓βad ␈↓αexp␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓], (( `␈↓∧HRRZ@␈↓↓' ␈↓∧1␈↓↓ ␈↓∧1␈↓↓))>]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βa ␈↓αexp␈↓↓ ␈↓βeq ␈↓∧AND␈↓↓ ∨ ␈↓βa ␈↓αexp␈↓↓ ␈↓βeq ␈↓∧OR␈↓↓ ∨ ␈↓βa ␈↓αexp␈↓↓ ␈↓βeq ␈↓∧NOT␈↓↓ ∨ ␈↓βa ␈↓αexp␈↓↓ ␈↓βeq ␈↓∧EQ␈↓↓ ␈↓βthen␈↓↓
␈↓ ↓H␈↓↓␈↓ α8{␈↓αgensym␈↓↓[], ␈↓αgensym␈↓↓[]}[λ␈↓αl1␈↓↓, ␈↓αl2␈↓↓.
␈↓ ↓H␈↓↓␈↓ αX<␈↓αcombool␈↓↓[␈↓αexp␈↓↓, ␈↓αm␈↓↓, ␈↓αl1␈↓↓, ␈↓∧NIL␈↓↓, ␈↓αvpr␈↓↓],
␈↓ ↓H␈↓↓␈↓ αj<(␈↓∧MOVEI␈↓↓ ␈↓∧1␈↓↓ (␈↓∧QUOTE␈↓↓ ␈↓∧T␈↓↓)), <␈↓∧JRST␈↓↓, ␈↓∧0␈↓↓, ␈↓αl2␈↓↓>, <␈↓∧LABEL␈↓↓, ␈↓αl1␈↓↓>, (␈↓∧MOVEI␈↓↓ ␈↓∧1␈↓↓ ␈↓∧0␈↓↓), <␈↓∧LABEL␈↓↓, ␈↓αl2␈↓↓>>>]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βa ␈↓αexp␈↓↓ ␈↓βeq ␈↓∧COND␈↓↓ ␈↓βthen␈↓↓ ␈↓αcomcond␈↓↓[␈↓βd ␈↓αexp␈↓↓, ␈↓αm␈↓↓, ␈↓αgensym␈↓↓[], ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βa ␈↓αexp␈↓↓ ␈↓βeq ␈↓∧QUOTE␈↓↓ ␈↓βthen␈↓↓ <<␈↓∧MOVEI␈↓↓, ␈↓∧1␈↓↓, ␈↓αexp␈↓↓>>
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βat a ␈↓αexp␈↓↓ ␈↓βthen␈↓↓ <␈↓αcomplisa␈↓↓[␈↓βd ␈↓αexp␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓], <<␈↓∧CALL␈↓↓, ␈↓αlength␈↓↓ ␈↓βd ␈↓αexp␈↓↓, <␈↓∧E␈↓↓, ␈↓βa ␈↓αexp␈↓↓>, ␈↓∧S␈↓↓>>>
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βaa ␈↓αexp␈↓↓ ␈↓βeq ␈↓∧LAMBDA␈↓↓ ␈↓βthen␈↓↓
␈↓ ↓H␈↓↓␈↓ α8{␈↓αlength␈↓↓ ␈↓βd ␈↓αexp␈↓↓}[λ␈↓αn␈↓↓.
␈↓ ↓H␈↓↓␈↓ αX<␈↓αstackup␈↓↓[␈↓βd ␈↓αexp␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓],
␈↓ ↓H␈↓↓␈↓ αj␈↓αcompexp␈↓↓[␈↓βadda ␈↓αexp␈↓↓, ␈↓αm␈↓↓ - ␈↓αn␈↓↓, ␈↓αapend␈↓↓[␈↓αprup␈↓↓[␈↓βada ␈↓αexp␈↓↓, ␈↓∧1␈↓↓ - ␈↓αm␈↓↓], ␈↓αvpr␈↓↓]],
␈↓ ↓H␈↓↓␈↓ αj␈↓αsubstack␈↓↓ ␈↓αn␈↓↓>]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓∧T␈↓↓ ␈↓βthen␈↓↓ ␈↓∧NIL
␈↓ ↓H␈↓∧␈↓ ↓x␈↓αstackup␈↓↓[␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓] ←
␈↓ ↓H␈↓↓␈↓ α_␈↓βif␈↓↓ ␈↓βn ␈↓αu␈↓↓ ␈↓βthen␈↓↓ ␈↓∧NIL␈↓↓ ␈↓βelse␈↓↓ <␈↓αcompexp␈↓↓[␈↓βa ␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓], ((␈↓∧PUSH␈↓↓ ␈↓∧P␈↓↓ ␈↓∧1␈↓↓)), ␈↓αstackup␈↓↓[␈↓βd ␈↓αu␈↓↓, ␈↓αm␈↓↓ - ␈↓∧1␈↓↓, ␈↓αvpr␈↓↓]>
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αccchain␈↓↓ ␈↓αexp␈↓↓ ← [␈↓βa ␈↓αexp␈↓↓ ␈↓βeq ␈↓∧CAR␈↓↓ ∨ ␈↓βa ␈↓αexp␈↓↓ ␈↓βeq ␈↓∧CDR␈↓↓] ∧ [␈↓βat ad ␈↓αexp␈↓↓ ∨ ␈↓αccchain␈↓↓ ␈↓βad ␈↓αexp␈↓↓]
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αcompc␈↓↓[␈↓αexp␈↓↓, ␈↓αn2␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓] ←
␈↓ ↓H␈↓↓␈↓ α_␈↓βif␈↓↓ ␈↓βat ␈↓αexp␈↓↓ ␈↓βthen␈↓↓ ␈↓αerr␈↓↓ ␈↓∧COMPC
␈↓ ↓H␈↓∧␈↓ α_␈↓βelse if␈↓↓ ␈↓βa ␈↓αexp␈↓↓ ␈↓βeq ␈↓∧CAR␈↓↓ ␈↓βthen␈↓↓
␈↓ ↓H␈↓↓␈↓ α8[␈↓βif␈↓↓ ␈↓βat ad ␈↓αexp␈↓↓ ␈↓βthen␈↓↓ << `␈↓∧HLRZ@␈↓↓' , ␈↓αn2␈↓↓, ␈↓αm␈↓↓ + ␈↓βd ␈↓αassoc␈↓↓[␈↓βad ␈↓αexp␈↓↓, ␈↓αvpr␈↓↓], ␈↓∧P␈↓↓>>
␈↓ ↓H␈↓↓␈↓ αA␈↓βelse␈↓↓ < `␈↓∧HLRZ@␈↓↓' , ␈↓αn2␈↓↓, ␈↓αn2␈↓↓> . ␈↓αcompc␈↓↓[␈↓βad ␈↓αexp␈↓↓, ␈↓αn2␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓]]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βat ad ␈↓αexp␈↓↓ ␈↓βthen␈↓↓ << `␈↓∧HRRZ@␈↓↓' , ␈↓αn2␈↓↓, ␈↓αm␈↓↓ + ␈↓βd ␈↓αassoc␈↓↓[␈↓βad ␈↓αexp␈↓↓, ␈↓αvpr␈↓↓], ␈↓∧P␈↓↓>>
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse␈↓↓ < `␈↓∧HRRZ@␈↓↓' , ␈↓αn2␈↓↓, ␈↓αn2␈↓↓> . ␈↓αcompc␈↓↓[␈↓βad ␈↓αexp␈↓↓, ␈↓αn2␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ Z12
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αcomcond␈↓↓[␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αl␈↓↓, ␈↓αvpr␈↓↓] ←
␈↓ ↓H␈↓↓␈↓ α_␈↓βif␈↓↓ ␈↓βn ␈↓αu␈↓↓ ␈↓βthen␈↓↓ <<␈↓∧LABEL␈↓↓, ␈↓αl␈↓↓>>
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ¬␈↓βat aa ␈↓αu␈↓↓ ∧ ␈↓βaaa ␈↓αu␈↓↓ ␈↓βeq ␈↓∧NULL␈↓↓ ∧ ␈↓βn ada ␈↓αu␈↓↓ ␈↓βthen␈↓↓
␈↓ ↓H␈↓↓␈↓ α8<␈↓αcompexp␈↓↓[␈↓βadaa ␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓], <<␈↓∧JUMPE␈↓↓, ␈↓∧1␈↓↓, ␈↓αl␈↓↓>>, ␈↓αcomcond␈↓↓[␈↓βd ␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αl␈↓↓, ␈↓αvpr␈↓↓]>
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βaa ␈↓αu␈↓↓ ␈↓βeq ␈↓∧T␈↓↓ ␈↓βthen␈↓↓ <␈↓αcompexp␈↓↓[␈↓βada ␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓], <<␈↓∧LABEL␈↓↓, ␈↓αl␈↓↓>>>
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse␈↓↓ {␈↓αgensym␈↓↓[]}[λ␈↓αl1␈↓↓.
␈↓ ↓H␈↓↓␈↓ α8<␈↓αcombool␈↓↓[␈↓βaa ␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αl1␈↓↓, ␈↓∧NIL␈↓↓, ␈↓αvpr␈↓↓],
␈↓ ↓H␈↓↓␈↓ αJ␈↓αcompexp␈↓↓[␈↓βada ␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓],
␈↓ ↓H␈↓↓␈↓ αJ<<␈↓∧JRST␈↓↓, ␈↓∧0␈↓↓, ␈↓αl␈↓↓>, <␈↓∧LABEL␈↓↓, ␈↓αl1␈↓↓>>,
␈↓ ↓H␈↓↓␈↓ αJ␈↓αcomcond␈↓↓[␈↓βd ␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αl␈↓↓, ␈↓αvpr␈↓↓]>]
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αcomplisa␈↓↓[␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓] ←
␈↓ ↓H␈↓↓␈↓ α_{␈↓αclassify␈↓↓ ␈↓αu␈↓↓}[λ␈↓αz␈↓↓.
␈↓ ↓H␈↓↓␈↓ α8<␈↓αcomplis␈↓↓[␈↓αz␈↓↓, ␈↓αm␈↓↓, ␈↓∧1␈↓↓, ␈↓αvpr␈↓↓], ␈↓αloadac␈↓↓[␈↓αz␈↓↓, ␈↓∧1␈↓↓ - ␈↓αccount␈↓↓ ␈↓αz␈↓↓, ␈↓∧1␈↓↓, ␈↓αm␈↓↓ - ␈↓αccount␈↓↓ ␈↓αz␈↓↓, ␈↓αvpr␈↓↓], ␈↓αsubstack␈↓↓ ␈↓αccount␈↓↓ ␈↓αz␈↓↓>]
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αccount␈↓↓ ␈↓αz␈↓↓ ← ␈↓βif␈↓↓ ␈↓βn ␈↓αz␈↓↓ ␈↓βthen␈↓↓ ␈↓∧0␈↓↓ ␈↓βelse if␈↓↓ ␈↓βaa ␈↓αz␈↓↓ ␈↓βeq ␈↓∧4␈↓↓ ␈↓βthen␈↓↓ ␈↓∧1␈↓↓ + ␈↓αccount␈↓↓ ␈↓βd ␈↓αz␈↓↓ ␈↓βelse␈↓↓ ␈↓αccount␈↓↓ ␈↓βd ␈↓αz
␈↓ ↓H␈↓α␈↓ ↓xloadac␈↓↓[␈↓αz␈↓↓, ␈↓αm2␈↓↓, ␈↓αn2␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓] ←
␈↓ ↓H␈↓↓␈↓ α_␈↓βif␈↓↓ ␈↓βn ␈↓αz␈↓↓ ␈↓βthen␈↓↓ ␈↓∧NIL
␈↓ ↓H␈↓∧␈↓ α_␈↓βelse if␈↓↓ ␈↓βaa ␈↓αz␈↓↓ ␈↓βeq ␈↓∧1␈↓↓ ␈↓βthen␈↓↓
␈↓ ↓H␈↓↓␈↓ α8<␈↓∧MOVE␈↓↓, ␈↓αn2␈↓↓, ␈↓αm␈↓↓ + ␈↓βd ␈↓αassoc␈↓↓[␈↓βda ␈↓αz␈↓↓, ␈↓αvpr␈↓↓], ␈↓∧P␈↓↓> . ␈↓αloadac␈↓↓[␈↓βd ␈↓αz␈↓↓, ␈↓αm2␈↓↓, ␈↓αn2␈↓↓ + ␈↓∧1␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βaa ␈↓αz␈↓↓ ␈↓βeq ␈↓∧0␈↓↓ ␈↓βthen␈↓↓ <␈↓∧MOVEI␈↓↓, ␈↓αn2␈↓↓, <␈↓∧QUOTE␈↓↓, ␈↓βda ␈↓αz␈↓↓>> . ␈↓αloadac␈↓↓[␈↓βd ␈↓αz␈↓↓, ␈↓αm2␈↓↓, ␈↓αn2␈↓↓ + ␈↓∧1␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βaa ␈↓αz␈↓↓ ␈↓βeq ␈↓∧2␈↓↓ ␈↓βthen␈↓↓ <␈↓∧MOVEI␈↓↓, ␈↓αn2␈↓↓, ␈↓βda ␈↓αz␈↓↓> . ␈↓αloadac␈↓↓[␈↓βd ␈↓αz␈↓↓, ␈↓αm2␈↓↓, ␈↓αn2␈↓↓ + ␈↓∧1␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βaa ␈↓αz␈↓↓ ␈↓βeq ␈↓∧3␈↓↓ ␈↓βthen␈↓↓ <␈↓αreverse␈↓↓ ␈↓αcompc␈↓↓[␈↓βda ␈↓αz␈↓↓, ␈↓αn2␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓], ␈↓αloadac␈↓↓[␈↓βd ␈↓αz␈↓↓, ␈↓αm2␈↓↓, ␈↓αn2␈↓↓ + ␈↓∧1␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓]>
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βaa ␈↓αz␈↓↓ ␈↓βeq ␈↓∧5␈↓↓ ␈↓βthen␈↓↓ ␈↓αloadac␈↓↓[␈↓βd ␈↓αz␈↓↓, ␈↓∧1␈↓↓, ␈↓αn2␈↓↓ + ␈↓∧1␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse␈↓↓ <␈↓∧MOVE␈↓↓, ␈↓αn2␈↓↓, ␈↓αm2␈↓↓, ␈↓∧P␈↓↓> . ␈↓αloadac␈↓↓[␈↓βd ␈↓αz␈↓↓, ␈↓αm2␈↓↓ + ␈↓∧1␈↓↓, ␈↓αn2␈↓↓ + ␈↓∧1␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αcomplis␈↓↓[␈↓αz␈↓↓, ␈↓αm␈↓↓, ␈↓αk␈↓↓, ␈↓αvpr␈↓↓] ←
␈↓ ↓H␈↓↓␈↓ α_␈↓βif␈↓↓ ␈↓βn ␈↓αz␈↓↓ ␈↓βthen␈↓↓ ␈↓∧NIL
␈↓ ↓H␈↓∧␈↓ α_␈↓βelse if␈↓↓ ␈↓βaa ␈↓αz␈↓↓ ␈↓βeq ␈↓∧4␈↓↓ ␈↓βthen␈↓↓ <␈↓αcompexp␈↓↓[␈↓βda ␈↓αz␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓], ((␈↓∧PUSH␈↓↓ ␈↓∧P␈↓↓ ␈↓∧1␈↓↓)), ␈↓αcomplis␈↓↓[␈↓βd ␈↓αz␈↓↓, ␈↓αm␈↓↓ - ␈↓∧1␈↓↓, ␈↓αk␈↓↓ + ␈↓∧1␈↓↓, ␈↓αvpr␈↓↓]>
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βaa ␈↓αz␈↓↓ ␈↓βeq ␈↓∧5␈↓↓ ␈↓βthen␈↓↓ <␈↓αcompexp␈↓↓[␈↓βda ␈↓αz␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓], ␈↓βif␈↓↓ ␈↓αk␈↓↓ ␈↓βeq ␈↓∧1␈↓↓ ␈↓βthen␈↓↓ ␈↓∧NIL␈↓↓ ␈↓βelse␈↓↓ <<␈↓∧MOVE␈↓↓, ␈↓αk␈↓↓, ␈↓∧1␈↓↓>>>
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse␈↓↓ ␈↓αcomplis␈↓↓[␈↓βd ␈↓αz␈↓↓, ␈↓αm␈↓↓, ␈↓αk␈↓↓ + ␈↓∧1␈↓↓, ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αclassify␈↓↓ ␈↓αu␈↓↓ ← ␈↓αclass2␈↓↓[␈↓αclass1␈↓↓[␈↓αu␈↓↓, ␈↓∧NIL␈↓↓], ␈↓∧NIL␈↓↓, ␈↓∧T␈↓↓]
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ Z13
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αclass1␈↓↓[␈↓αu␈↓↓, ␈↓αv␈↓↓] ←
␈↓ ↓H␈↓↓␈↓ α_␈↓βif␈↓↓ ␈↓βn ␈↓αu␈↓↓ ␈↓βthen␈↓↓ ␈↓αv
␈↓ ↓H␈↓α␈↓ α_␈↓βelse if␈↓↓ ␈↓βat a ␈↓αu␈↓↓ ␈↓βthen␈↓↓
␈↓ ↓H␈↓↓␈↓ α8[␈↓βif␈↓↓ ␈↓αequal␈↓↓[␈↓βa ␈↓αu␈↓↓, ␈↓∧NIL␈↓↓] ∨ ␈↓αequal␈↓↓[␈↓βa ␈↓αu␈↓↓, ␈↓∧T␈↓↓] ∨ ␈↓αnumberp␈↓↓ ␈↓βa ␈↓αu␈↓↓ ␈↓βthen␈↓↓ ␈↓αclass1␈↓↓[␈↓βd ␈↓αu␈↓↓, [␈↓∧0␈↓↓ . ␈↓βa ␈↓αu␈↓↓] . ␈↓αv␈↓↓]
␈↓ ↓H␈↓↓␈↓ αA␈↓βelse␈↓↓ ␈↓αclass1␈↓↓[␈↓βd ␈↓αu␈↓↓, [␈↓∧1␈↓↓ . ␈↓βa ␈↓αu␈↓↓] . ␈↓αv␈↓↓]]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓αequal␈↓↓[␈↓βaa ␈↓αu␈↓↓, ␈↓∧QUOTE␈↓↓] ␈↓βthen␈↓↓ ␈↓αclass1␈↓↓[␈↓βd ␈↓αu␈↓↓, [␈↓∧2␈↓↓ . ␈↓βa ␈↓αu␈↓↓] . ␈↓αv␈↓↓]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓αccchain␈↓↓ ␈↓βa ␈↓αu␈↓↓ ␈↓βthen␈↓↓ ␈↓αclass1␈↓↓[␈↓βd ␈↓αu␈↓↓, [␈↓∧3␈↓↓ . ␈↓βa ␈↓αu␈↓↓] . ␈↓αv␈↓↓]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse␈↓↓ ␈↓αclass1␈↓↓[␈↓βd ␈↓αu␈↓↓, [␈↓∧4␈↓↓ . ␈↓βa ␈↓αu␈↓↓] . ␈↓αv␈↓↓]
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αclass2␈↓↓[␈↓αu␈↓↓, ␈↓αv␈↓↓, ␈↓αflg␈↓↓] ←
␈↓ ↓H␈↓↓␈↓ α_␈↓βif␈↓↓ ␈↓βn ␈↓αu␈↓↓ ␈↓βthen␈↓↓ ␈↓αv
␈↓ ↓H␈↓α␈↓ α_␈↓βelse if␈↓↓ ␈↓αflg␈↓↓ ∧ ␈↓βaa ␈↓αu␈↓↓ ␈↓βeq ␈↓∧4␈↓↓ ␈↓βthen␈↓↓ ␈↓αclass2␈↓↓[␈↓βd ␈↓αu␈↓↓, [␈↓∧5␈↓↓ . ␈↓βda ␈↓αu␈↓↓] . ␈↓αv␈↓↓, ␈↓∧NIL␈↓↓]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse␈↓↓ ␈↓αclass2␈↓↓[␈↓βd ␈↓αu␈↓↓, ␈↓βa ␈↓αu␈↓↓ . ␈↓αv␈↓↓, ␈↓αflg␈↓↓]
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αmkjrst␈↓↓ ␈↓αl␈↓↓ ← <<␈↓∧JRST␈↓↓, ␈↓∧0␈↓↓, ␈↓αl␈↓↓>>
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αcombool␈↓↓[␈↓αp␈↓↓, ␈↓αm␈↓↓, ␈↓αl␈↓↓, ␈↓αflg␈↓↓, ␈↓αvpr␈↓↓] ←
␈↓ ↓H␈↓↓␈↓ α_␈↓βif␈↓↓ ␈↓αp␈↓↓ ␈↓βeq ␈↓∧T␈↓↓ ␈↓βthen␈↓↓ [␈↓βif␈↓↓ ␈↓αflg␈↓↓ ␈↓βthen␈↓↓ ␈↓αmkjrst␈↓↓ ␈↓αl␈↓↓ ␈↓βelse␈↓↓ ␈↓∧NIL␈↓↓]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βat ␈↓αp␈↓↓ ␈↓βthen␈↓↓ <␈↓αcompexp␈↓↓[␈↓αp␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓], <<␈↓βif␈↓↓ ␈↓αflg␈↓↓ ␈↓βthen␈↓↓ ␈↓∧JUMPN␈↓↓ ␈↓βelse␈↓↓ ␈↓∧JUMPE␈↓↓, ␈↓∧1␈↓↓, ␈↓αl␈↓↓>>>
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βa ␈↓αp␈↓↓ ␈↓βeq ␈↓∧EQ␈↓↓ ␈↓βthen␈↓↓
␈↓ ↓H␈↓↓␈↓ α8<␈↓αcomplisa␈↓↓[␈↓βd ␈↓αp␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓], ␈↓βif␈↓↓ ␈↓αflg␈↓↓ ␈↓βthen␈↓↓ ((␈↓∧CAMN␈↓↓ ␈↓∧1␈↓↓ ␈↓∧2␈↓↓)) ␈↓βelse␈↓↓ ((␈↓∧CAME␈↓↓ ␈↓∧1␈↓↓ ␈↓∧2␈↓↓)), ␈↓αmkjrst␈↓↓ ␈↓αl␈↓↓>
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βa ␈↓αp␈↓↓ ␈↓βeq ␈↓∧AND␈↓↓ ␈↓βthen␈↓↓
␈↓ ↓H␈↓↓␈↓ α8[␈↓βif␈↓↓ ¬␈↓αflg␈↓↓ ␈↓βthen␈↓↓ ␈↓αcompandor␈↓↓[␈↓βd ␈↓αp␈↓↓, ␈↓αm␈↓↓, ␈↓αl␈↓↓, ␈↓∧NIL␈↓↓, ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓↓␈↓ αA␈↓βelse␈↓↓ {␈↓αgensym␈↓↓[]}[λ␈↓αl1␈↓↓. <␈↓αcompandor1␈↓↓[␈↓βd ␈↓αp␈↓↓, ␈↓αm␈↓↓, ␈↓αl1␈↓↓, ␈↓αl␈↓↓, ␈↓∧NIL␈↓↓, ␈↓αvpr␈↓↓], <<␈↓∧LABEL␈↓↓, ␈↓αl1␈↓↓>>>]]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βa ␈↓αp␈↓↓ ␈↓βeq ␈↓∧OR␈↓↓ ␈↓βthen␈↓↓
␈↓ ↓H␈↓↓␈↓ α8[␈↓βif␈↓↓ ␈↓αflg␈↓↓ ␈↓βthen␈↓↓ ␈↓αcompandor␈↓↓[␈↓βd ␈↓αp␈↓↓, ␈↓αm␈↓↓, ␈↓αl␈↓↓, ␈↓∧T␈↓↓, ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓↓␈↓ αA␈↓βelse␈↓↓ {␈↓αgensym␈↓↓[]}[λ␈↓αl1␈↓↓. <␈↓αcompandor1␈↓↓[␈↓βd ␈↓αp␈↓↓, ␈↓αm␈↓↓, ␈↓αl1␈↓↓, ␈↓αl␈↓↓, ␈↓∧T␈↓↓, ␈↓αvpr␈↓↓], <<␈↓∧LABEL␈↓↓, ␈↓αl1␈↓↓>>>]]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βa ␈↓αp␈↓↓ ␈↓βeq ␈↓∧NOT␈↓↓ ␈↓βthen␈↓↓ ␈↓αcombool␈↓↓[␈↓βad ␈↓αp␈↓↓, ␈↓αm␈↓↓, ␈↓αl␈↓↓, ¬␈↓αflg␈↓↓, ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βa ␈↓αp␈↓↓ ␈↓βeq ␈↓∧NULL␈↓↓ ␈↓βthen␈↓↓
␈↓ ↓H␈↓↓␈↓ α8<␈↓αcompexp␈↓↓[␈↓βad ␈↓αp␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓], <<␈↓βif␈↓↓ ␈↓αflg␈↓↓ ␈↓βthen␈↓↓ ␈↓∧JUMPE␈↓↓ ␈↓βelse␈↓↓ ␈↓∧JUMPN␈↓↓, ␈↓∧1␈↓↓, ␈↓αl␈↓↓>>>
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse␈↓↓ <␈↓αcompexp␈↓↓[␈↓αp␈↓↓, ␈↓αm␈↓↓, ␈↓αvpr␈↓↓], <<␈↓βif␈↓↓ ␈↓αflg␈↓↓ ␈↓βthen␈↓↓ ␈↓∧JUMPN␈↓↓ ␈↓βelse␈↓↓ ␈↓∧JUMPE␈↓↓, ␈↓∧1␈↓↓, ␈↓αl␈↓↓>>>
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αcompandor␈↓↓[␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αl␈↓↓, ␈↓αflg␈↓↓, ␈↓αvpr␈↓↓] ←
␈↓ ↓H␈↓↓␈↓ α_␈↓βif␈↓↓ ␈↓βn ␈↓αu␈↓↓ ␈↓βthen␈↓↓ ␈↓∧NIL␈↓↓ ␈↓βelse␈↓↓ <␈↓αcombool␈↓↓[␈↓βa ␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αl␈↓↓, ␈↓αflg␈↓↓, ␈↓αvpr␈↓↓], ␈↓αcompandor␈↓↓[␈↓βd ␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αl␈↓↓, ␈↓αflg␈↓↓, ␈↓αvpr␈↓↓]>
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αcompandor1␈↓↓[␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αl␈↓↓, ␈↓αl2␈↓↓, ␈↓αflg␈↓↓, ␈↓αvpr␈↓↓] ←
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ Z14
␈↓ ↓H␈↓↓␈↓ α_␈↓βif␈↓↓ ␈↓βn ␈↓αu␈↓↓ ␈↓βthen␈↓↓ ␈↓αmkjrst␈↓↓ ␈↓αl2
␈↓ ↓H␈↓α␈↓ α_␈↓βelse if␈↓↓ ␈↓βn d ␈↓αu␈↓↓ ␈↓βthen␈↓↓ ␈↓αcombool␈↓↓[␈↓βa ␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αl2␈↓↓, ¬␈↓αflg␈↓↓, ␈↓αvpr␈↓↓]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse␈↓↓ <␈↓αcombool␈↓↓[␈↓βa ␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αl␈↓↓, ␈↓αflg␈↓↓, ␈↓αvpr␈↓↓], ␈↓αcompandor1␈↓↓[␈↓βd ␈↓αu␈↓↓, ␈↓αm␈↓↓, ␈↓αl␈↓↓, ␈↓αl2␈↓↓, ␈↓αflg␈↓↓, ␈↓αvpr␈↓↓]>
␈↓ ↓H␈↓↓␈↓ ↓x␈↓αflat␈↓↓[␈↓αu␈↓↓, ␈↓αs␈↓↓] ←
␈↓ ↓H␈↓↓␈↓ α_␈↓βif␈↓↓ ␈↓βn ␈↓αu␈↓↓ ␈↓βthen␈↓↓ ␈↓αs
␈↓ ↓H␈↓α␈↓ α_␈↓βelse if␈↓↓ ␈↓βn a ␈↓αu␈↓↓ ␈↓βthen␈↓↓ ␈↓αflat␈↓↓[␈↓βd ␈↓αu␈↓↓, ␈↓αs␈↓↓]
␈↓ ↓H␈↓↓␈↓ α_␈↓βelse if␈↓↓ ␈↓βa ␈↓αu␈↓↓ ␈↓βeq ␈↓∧LABEL␈↓↓ ␈↓βthen␈↓↓ ␈↓βad ␈↓αu␈↓↓ . ␈↓αs
␈↓ ↓H␈↓α␈↓ α_␈↓βelse if␈↓↓ ␈↓βat a ␈↓αu␈↓↓ ␈↓βthen␈↓↓ ␈↓αu␈↓↓ . ␈↓αs
␈↓ ↓H␈↓α␈↓ α_␈↓βelse␈↓↓ ␈↓αflat␈↓↓[␈↓βa ␈↓αu␈↓↓, ␈↓αflat␈↓↓[␈↓βd ␈↓αu␈↓↓, ␈↓αs␈↓↓]]
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ Z15
␈↓ ↓H␈↓Annotated listing of LCOM0:
␈↓ ↓H␈↓(DEFPROP LC0FNS
␈↓ ↓H␈↓ (LC0FNS COMPL
␈↓ ↓H␈↓ COMP
␈↓ ↓H␈↓ PRUP
␈↓ ↓H␈↓ MKPUSH
␈↓ ↓H␈↓ COMPEXP
␈↓ ↓H␈↓ COMPLIS
␈↓ ↓H␈↓ LOADAC
␈↓ ↓H␈↓ COMCOND
␈↓ ↓H␈↓ COMBOOL
␈↓ ↓H␈↓ COMPANDOR)
␈↓ ↓H␈↓VALUE)
␈↓ ↓H␈↓~COMPL is the user-callable driver. It is a FEXPR. It takes as
␈↓ ↓H␈↓~ an argument a single file name, which must have no extension.
␈↓ ↓H␈↓~ EXPRs on a file called FILNAM will be compiled into LAP and
␈↓ ↓H␈↓~ written on the file FILNAM.LAP. Other types of function
␈↓ ↓H␈↓~ definitions and non-definitions are simply copied to output.
␈↓ ↓H␈↓(DEFPROP COMPL
␈↓ ↓H␈↓ (LAMBDA(FILE)
␈↓ ↓H␈↓ (PROG (Z)
␈↓ ↓H␈↓ (EVAL
␈↓ ↓H␈↓ (CONS (QUOTE OUTPUT)
␈↓ ↓H␈↓ (CONS (QUOTE DSK:)
␈↓ ↓H␈↓ (LIST (CONS (CAR FILE) (QUOTE LAP))))))
␈↓ ↓H␈↓ (EVAL (CONS (QUOTE INPUT) (CONS (QUOTE DSK:) FILE)))
␈↓ ↓H␈↓ (INC T NIL)
␈↓ ↓H␈↓ LOOP (SETQ Z (ERRSET (READ)))
␈↓ ↓H␈↓ (COND ((ATOM Z) (GO DONE)))
␈↓ ↓H␈↓ (SETQ Z (CAR Z))
␈↓ ↓H␈↓ (COND ((OR (EQ (CAR Z) (QUOTE DE))
␈↓ ↓H␈↓ (AND (EQ (CAR Z) (QUOTE DEFPROP))
␈↓ ↓H␈↓ (EQ (CADDDR Z) (QUOTE EXPR))))
␈↓ ↓H␈↓ (PROG (PROG)
␈↓ ↓H␈↓ (SETQ PROG
␈↓ ↓H␈↓ (COND ((EQ (CAR Z) (QUOTE DE))
␈↓ ↓H␈↓ (COMP (CADR Z)
␈↓ ↓H␈↓ (CADDR Z)
␈↓ ↓H␈↓ (CADDDR Z)))
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ (COMP (CADR Z)
␈↓ ↓H␈↓ (CADR (CADDR Z))
␈↓ ↓H␈↓ (CADDR (CADDR Z))))))
␈↓ ↓H␈↓ (OUTC T NIL)
␈↓ ↓H␈↓ (MAPC (FUNCTION PRINT) PROG)
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ Z16
␈↓ ↓H␈↓ (OUTC NIL NIL)
␈↓ ↓H␈↓ (PRINT (LIST (CADR Z) (LENGTH PROG)))))
␈↓ ↓H␈↓ (T (OUTC T NIL) (PRINT Z) (OUTC NIL NIL)))
␈↓ ↓H␈↓ (GO LOOP)
␈↓ ↓H␈↓ DONE (OUTC T NIL)
␈↓ ↓H␈↓ (OUTC NIL T)
␈↓ ↓H␈↓ (INC NIL T)
␈↓ ↓H␈↓ (RETURN (QUOTE ENDCOMP))))
␈↓ ↓H␈↓FEXPR)
␈↓ ↓H␈↓~COMP compiles a single function definition, returning a list of
␈↓ ↓H␈↓~ the LAP code corresponding to the definition.
␈↓ ↓H␈↓~ FN is the atomic name of the function being compiled.
␈↓ ↓H␈↓~ VARS is the formal parameter list for the function.
␈↓ ↓H␈↓~ EXP is the function body.
␈↓ ↓H␈↓(DEFPROP COMP
␈↓ ↓H␈↓ (LAMBDA(FN VARS EXP)
␈↓ ↓H␈↓ ((LAMBDA(N)
␈↓ ↓H␈↓ (APPEND (LIST (LIST (QUOTE LAP) FN (QUOTE SUBR)))
␈↓ ↓H␈↓ (MKPUSH N 1)
␈↓ ↓H␈↓ (COMPEXP EXP (MINUS N) (PRUP VARS 1))
␈↓ ↓H␈↓ (LIST
␈↓ ↓H␈↓ (LIST (QUOTE SUB) (QUOTE P) (LIST (QUOTE C) N 0 N 0)))
␈↓ ↓H␈↓ (QUOTE ((POPJ P) NIL))))
␈↓ ↓H␈↓ (LENGTH VARS)))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓~PRUP returns an A-LIST formed by pairing successive elements of
␈↓ ↓H␈↓~ VARS with consecutive integers beginning with N.
␈↓ ↓H␈↓(DEFPROP PRUP
␈↓ ↓H␈↓ (LAMBDA(VARS N)
␈↓ ↓H␈↓ (COND ((NULL VARS) NIL)
␈↓ ↓H␈↓ (T (CONS (CONS (CAR VARS) N) (PRUP (CDR VARS) (PLUS N 1))))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓~MKPUSH returns a list of N (PUSH P i) instructions, where i runs
␈↓ ↓H␈↓~ from M to M+N-1. Used to push arguments onto the stack.
␈↓ ↓H␈↓(DEFPROP MKPUSH
␈↓ ↓H␈↓ (LAMBDA(N M)
␈↓ ↓H␈↓ (COND ((LESSP N M) NIL)
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ (CONS (LIST (QUOTE PUSH) (QUOTE P) M)
␈↓ ↓H␈↓ (MKPUSH N (PLUS M 1))))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ Z17
␈↓ ↓H␈↓~COMPEXP is the heart of LCOM0. It determines precisely
␈↓ ↓H␈↓~ what an expression is, and compiles appropriate code
␈↓ ↓H␈↓~ for it. It returns a list of that code.
␈↓ ↓H␈↓~ EXP is the expression to be compiled.
␈↓ ↓H␈↓~ M is minus the number of entries on the stack. When
␈↓ ↓H␈↓~ added to a value retrieved from the A-LIST VPR, it
␈↓ ↓H␈↓~ can be used to locate a variable on the stack.
␈↓ ↓H␈↓~ VPR is an A-LIST, associating variable names with
␈↓ ↓H␈↓~ numbers which, when added to M, give stack offsets.
␈↓ ↓H␈↓~ Both M and VPR maintain these definitions throughout.
␈↓ ↓H␈↓(DEFPROP COMPEXP
␈↓ ↓H␈↓ (LAMBDA(EXP M VPR)
␈↓ ↓H␈↓ (COND ((NULL EXP) (QUOTE ((MOVEI 1 0)))) ~NIL
␈↓ ↓H␈↓ ((EQ EXP T) (QUOTE ((MOVEI 1 (QUOTE T))))) ~T
␈↓ ↓H␈↓ ((ATOM EXP) ~variable
␈↓ ↓H␈↓ (LIST
␈↓ ↓H␈↓ (LIST (QUOTE MOVE)
␈↓ ↓H␈↓ 1
␈↓ ↓H␈↓ (PLUS M (CDR (ASSOC EXP VPR)))
␈↓ ↓H␈↓ (QUOTE P))))
␈↓ ↓H␈↓ ((OR (EQ (CAR EXP) (QUOTE AND)) ~boolean expression
␈↓ ↓H␈↓ (EQ (CAR EXP) (QUOTE OR))
␈↓ ↓H␈↓ (EQ (CAR EXP) (QUOTE NOT)))
␈↓ ↓H␈↓ ((LAMBDA(L1 L2)
␈↓ ↓H␈↓ (APPEND
␈↓ ↓H␈↓ (COMBOOL EXP M L1 NIL VPR)
␈↓ ↓H␈↓ (LIST (QUOTE (MOVEI 1 (QUOTE T)))
␈↓ ↓H␈↓ (LIST (QUOTE JRST) 0 L2)
␈↓ ↓H␈↓ L1
␈↓ ↓H␈↓ (QUOTE (MOVEI 1 0))
␈↓ ↓H␈↓ L2)))
␈↓ ↓H␈↓ (GENSYM)
␈↓ ↓H␈↓ (GENSYM)))
␈↓ ↓H␈↓ ((EQ (CAR EXP) (QUOTE COND)) ~COND
␈↓ ↓H␈↓ (COMCOND (CDR EXP) M (GENSYM) VPR))
␈↓ ↓H␈↓ ((EQ (CAR EXP) (QUOTE QUOTE)) ~QUOTE
␈↓ ↓H␈↓ (LIST (LIST (QUOTE MOVEI) 1 EXP)))
␈↓ ↓H␈↓ ((ATOM (CAR EXP)) ~function call
␈↓ ↓H␈↓ ((LAMBDA(N)
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ Z18
␈↓ ↓H␈↓ (APPEND
␈↓ ↓H␈↓ (COMPLIS (CDR EXP) M VPR)
␈↓ ↓H␈↓ (LOADAC (DIFFERENCE 1 N) 1)
␈↓ ↓H␈↓ (LIST
␈↓ ↓H␈↓ (LIST (QUOTE SUB) (QUOTE P) (LIST (QUOTE C) N 0 N 0)))
␈↓ ↓H␈↓ (LIST
␈↓ ↓H␈↓ (LIST (QUOTE CALL)
␈↓ ↓H␈↓ N
␈↓ ↓H␈↓ (LIST (QUOTE E) (CAR EXP))
␈↓ ↓H␈↓ (QUOTE S)))))
␈↓ ↓H␈↓ (LENGTH (CDR EXP))))
␈↓ ↓H␈↓ ((EQ (CAAR EXP) (QUOTE LAMBDA)) ~LAMBDA expression
␈↓ ↓H␈↓ ((LAMBDA(N)
␈↓ ↓H␈↓ (APPEND
␈↓ ↓H␈↓ (COMPLIS (CDR EXP) M VPR)
␈↓ ↓H␈↓ (COMPEXP
␈↓ ↓H␈↓ (CADDAR EXP)
␈↓ ↓H␈↓ (DIFFERENCE M N)
␈↓ ↓H␈↓ (APPEND (PRUP (CADAR EXP) (DIFFERENCE 1 M)) VPR))
␈↓ ↓H␈↓ (LIST
␈↓ ↓H␈↓ (LIST (QUOTE SUB) (QUOTE P) (LIST (QUOTE C) N 0 N 0)))))
␈↓ ↓H␈↓ (LENGTH (CDR EXP))))
␈↓ ↓H␈↓ (T NIL))) ~oops
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓~COMPLIS compiles code to evaluate each expression in a list of
␈↓ ↓H␈↓~ expressions and to push those values onto the stack. It
␈↓ ↓H␈↓~ returns a list of that code. It is used to compile code
␈↓ ↓H␈↓~ to evaluate arguments to called functions or LAMBDA expressions.
␈↓ ↓H␈↓~ U is a list of expressions.
␈↓ ↓H␈↓(DEFPROP COMPLIS
␈↓ ↓H␈↓ (LAMBDA(U M VPR)
␈↓ ↓H␈↓ (COND ((NULL U) NIL)
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ (APPEND (COMPEXP (CAR U) M VPR)
␈↓ ↓H␈↓ (QUOTE ((PUSH P 1)))
␈↓ ↓H␈↓ (COMPLIS (CDR U) (DIFFERENCE M 1) VPR)))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓~LOADAC returns a list of (MOVE i j P) instructions, loading
␈↓ ↓H␈↓~ consecutive accumulators from the top of the stack.
␈↓ ↓H␈↓~ K indexes the accumulator loaded.
␈↓ ↓H␈↓~ N indexes the stack offset.
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ Z19
␈↓ ↓H␈↓(DEFPROP LOADAC
␈↓ ↓H␈↓ (LAMBDA(N K)
␈↓ ↓H␈↓ (COND ((GREATERP N 0) NIL)
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ (CONS (LIST (QUOTE MOVE) K N (QUOTE P))
␈↓ ↓H␈↓ (LOADAC (PLUS N 1) (PLUS K 1))))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓~COMCOND compiles a COND.
␈↓ ↓H␈↓~ U is a list of clauses in the COND.
␈↓ ↓H␈↓~ L is a label to be emitted at the end of all code for
␈↓ ↓H␈↓~ the COND.
␈↓ ↓H␈↓(DEFPROP COMCOND
␈↓ ↓H␈↓ (LAMBDA(U M L VPR)
␈↓ ↓H␈↓ (COND ((NULL U) (LIST L))
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ ((LAMBDA(L1)
␈↓ ↓H␈↓ (APPEND (COMBOOL (CAAR U) M L1 NIL VPR)
␈↓ ↓H␈↓ (COMPEXP (CADAR U) M VPR)
␈↓ ↓H␈↓ (LIST (LIST (QUOTE JRST) L) L1)
␈↓ ↓H␈↓ (COMCOND (CDR U) M L VPR)))
␈↓ ↓H␈↓ (GENSYM)))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓~COMBOOL compiles code for a single predicate. That is, the
␈↓ ↓H␈↓~ code generated evaluates the predicate and branches somewhere,
␈↓ ↓H␈↓~ depending on the value.
␈↓ ↓H␈↓~ P is the predicate.
␈↓ ↓H␈↓~ L is a label which represents the branch point.
␈↓ ↓H␈↓~ FLG is a flag. If FLG is NIL, code is to fall thru on non-NIL
␈↓ ↓H␈↓~ result and branch to L on NIL result. If FLG is non-NIL,
␈↓ ↓H␈↓~ code is to fall thru on NIL result and branch to L on
␈↓ ↓H␈↓~ non-NIL result.
␈↓ ↓H␈↓(DEFPROP COMBOOL
␈↓ ↓H␈↓ (LAMBDA(P M L FLG VPR)
␈↓ ↓H␈↓ (COND ((ATOM P) ~simple variable
␈↓ ↓H␈↓ (APPEND
␈↓ ↓H␈↓ (COMPEXP P M VPR)
␈↓ ↓H␈↓ (LIST
␈↓ ↓H␈↓ (LIST (COND (FLG (QUOTE JUMPN)) (T (QUOTE JUMPE))) 1 L))))
␈↓ ↓H␈↓ ((EQ (CAR P) (QUOTE AND)) ~conjunction
␈↓ ↓H␈↓ (COND ((NOT FLG) (COMPANDOR (CDR P) M L NIL VPR))
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ ((LAMBDA(L1)
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ Z20
␈↓ ↓H␈↓ (APPEND (COMPANDOR (CDR P) M L1 NIL VPR)
␈↓ ↓H␈↓ (LIST (LIST (QUOTE JRST) 0 L))
␈↓ ↓H␈↓ (LIST L1)))
␈↓ ↓H␈↓ (GENSYM)))))
␈↓ ↓H␈↓ ((EQ (CAR P) (QUOTE OR)) ~disjunction
␈↓ ↓H␈↓ (COND (FLG (COMPANDOR (CDR P) M L T VPR))
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ ((LAMBDA(L1)
␈↓ ↓H␈↓ (APPEND (COMPANDOR (CDR P) M L1 T VPR)
␈↓ ↓H␈↓ (LIST (LIST (QUOTE JRST) 0 L))
␈↓ ↓H␈↓ (LIST L1)))
␈↓ ↓H␈↓ (GENSYM)))))
␈↓ ↓H␈↓ ((EQ (CAR P) (QUOTE NOT)) ~negation
␈↓ ↓H␈↓ (COMBOOL (CADR P) M L (NOT FLG) VPR))
␈↓ ↓H␈↓ (T ~other expression
␈↓ ↓H␈↓ (APPEND
␈↓ ↓H␈↓ (COMPEXP P M VPR)
␈↓ ↓H␈↓ (LIST
␈↓ ↓H␈↓ (LIST (COND (FLG (QUOTE JUMPN)) (T (QUOTE JUMPE)))
␈↓ ↓H␈↓ 1
␈↓ ↓H␈↓ L))))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓~COMPANDOR compiles code for lists of predicates connected
␈↓ ↓H␈↓~ conjunctively or disjunctively.
␈↓ ↓H␈↓~ U is a list of predicates.
␈↓ ↓H␈↓~ L is a label.
␈↓ ↓H␈↓~ FLG is a flag. If FLG is NIL, we are to fall thru on non-NIL
␈↓ ↓H␈↓~ results and branch to L on NIL results (AND case). If FLG
␈↓ ↓H␈↓~ is non-NIL, we are to fall thru on NIL results and branch
␈↓ ↓H␈↓~ to L on non-NIL results (OR case).
␈↓ ↓H␈↓(DEFPROP COMPANDOR
␈↓ ↓H␈↓ (LAMBDA(U M L FLG VPR)
␈↓ ↓H␈↓ (COND ((NULL U) NIL)
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ (APPEND (COMBOOL (CAR U) M L FLG VPR)
␈↓ ↓H␈↓ (COMPANDOR (CDR U) M L FLG VPR)))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ Z21
␈↓ ↓H␈↓LCOM4:
␈↓ ↓H␈↓(DEFPROP COMPFCNS
␈↓ ↓H␈↓ (COMPFCNS COMPL
␈↓ ↓H␈↓ COMP
␈↓ ↓H␈↓ SUBSTACK
␈↓ ↓H␈↓ PRUP
␈↓ ↓H␈↓ MKPUSH
␈↓ ↓H␈↓ COMPEXP
␈↓ ↓H␈↓ STACKUP
␈↓ ↓H␈↓ CCCHAIN
␈↓ ↓H␈↓ COMPC
␈↓ ↓H␈↓ COMCOND
␈↓ ↓H␈↓ COMPLISA
␈↓ ↓H␈↓ CCOUNT
␈↓ ↓H␈↓ LOADAC
␈↓ ↓H␈↓ COMPLIS
␈↓ ↓H␈↓ CLASSIFY
␈↓ ↓H␈↓ CLASS1
␈↓ ↓H␈↓ CLASS2
␈↓ ↓H␈↓ MKJRST
␈↓ ↓H␈↓ COMBOOL
␈↓ ↓H␈↓ COMPANDOR
␈↓ ↓H␈↓ COMPANDOR1
␈↓ ↓H␈↓ FLAT)
␈↓ ↓H␈↓VALUE)
␈↓ ↓H␈↓(DEFPROP COMPL
␈↓ ↓H␈↓ (LAMBDA(FILE)
␈↓ ↓H␈↓ (PROG (Z)
␈↓ ↓H␈↓ (EVAL
␈↓ ↓H␈↓ (CONS (QUOTE OUTPUT)
␈↓ ↓H␈↓ (CONS (QUOTE DSK:)
␈↓ ↓H␈↓ (LIST (CONS (CAR FILE) (QUOTE LAP))))))
␈↓ ↓H␈↓ (EVAL (CONS (QUOTE INPUT) (CONS (QUOTE DSK:) FILE)))
␈↓ ↓H␈↓ (INC (QUOTE T) NIL)
␈↓ ↓H␈↓ (OUTC T NIL)
␈↓ ↓H␈↓ LOOP (SETQ Z (ERRSET (READ)))
␈↓ ↓H␈↓ (COND ((ATOM Z) (GO DONE)) ((QUOTE T) (QUOTE NIL)))
␈↓ ↓H␈↓ (SETQ Z (CAR Z))
␈↓ ↓H␈↓ (COND ((OR (EQ (CAR Z) (QUOTE DE))
␈↓ ↓H␈↓ (AND (EQ (CAR Z) (QUOTE DEFPROP))
␈↓ ↓H␈↓ (EQ (CADDDR Z) (QUOTE EXPR))))
␈↓ ↓H␈↓ (PROG (PROG)
␈↓ ↓H␈↓ (SETQ PROG
␈↓ ↓H␈↓ (COND ((EQ (CAR Z) (QUOTE DE))
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ Z22
␈↓ ↓H␈↓ (COMP (CADR Z)
␈↓ ↓H␈↓ (CADDR Z)
␈↓ ↓H␈↓ (CADDDR Z)))
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ (COMP (CADR Z)
␈↓ ↓H␈↓ (CADR (CADDR Z))
␈↓ ↓H␈↓ (CADDR (CADDR Z))))))
␈↓ ↓H␈↓ (MAPC (FUNCTION PRINT) PROG)
␈↓ ↓H␈↓ (OUTC NIL NIL)
␈↓ ↓H␈↓ (PRINT (LIST (CADR Z) (LENGTH PROG)))
␈↓ ↓H␈↓ (OUTC T NIL)))
␈↓ ↓H␈↓ (T (PRINT Z)))
␈↓ ↓H␈↓ (GO LOOP)
␈↓ ↓H␈↓ DONE (OUTC NIL T)
␈↓ ↓H␈↓ (INC NIL T)
␈↓ ↓H␈↓ (RETURN (QUOTE ENDCOMP))))
␈↓ ↓H␈↓FEXPR)
␈↓ ↓H␈↓(DEFPROP COMP
␈↓ ↓H␈↓ (LAMBDA(FN VARS EXP)
␈↓ ↓H␈↓ ((LAMBDA(VPR N)
␈↓ ↓H␈↓ (FLAT (LIST (LIST (LIST (QUOTE LAP) FN (QUOTE SUBR)))
␈↓ ↓H␈↓ (MKPUSH N 1)
␈↓ ↓H␈↓ (COMPEXP EXP (MINUS N) VPR)
␈↓ ↓H␈↓ (SUBSTACK N)
␈↓ ↓H␈↓ (QUOTE ((POPJ P) (LABEL NIL))))
␈↓ ↓H␈↓ NIL))
␈↓ ↓H␈↓ (PRUP VARS 1)
␈↓ ↓H␈↓ (LENGTH VARS)))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓(DEFPROP SUBSTACK
␈↓ ↓H␈↓ (LAMBDA(N)
␈↓ ↓H␈↓ (COND ((EQ N 0) NIL)
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ (LIST
␈↓ ↓H␈↓ (LIST (QUOTE SUB) (QUOTE P) (LIST (QUOTE C) N 0 N 0))))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓(DEFPROP PRUP
␈↓ ↓H␈↓ (LAMBDA(VARS N)
␈↓ ↓H␈↓ (COND ((NULL VARS) NIL)
␈↓ ↓H␈↓ (T (CONS (CONS (CAR VARS) N) (PRUP (CDR VARS) (PLUS N 1))))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓(DEFPROP MKPUSH
␈↓ ↓H␈↓ (LAMBDA(N M)
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ Z23
␈↓ ↓H␈↓ (COND ((LESSP N M) NIL)
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ (CONS (LIST (QUOTE PUSH) (QUOTE P) M)
␈↓ ↓H␈↓ (MKPUSH N (PLUS M 1))))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓(DEFPROP COMPEXP
␈↓ ↓H␈↓ (LAMBDA(EXP M VPR)
␈↓ ↓H␈↓ (COND ((NULL EXP) (QUOTE ((MOVEI 1 0))))
␈↓ ↓H␈↓ ((OR (EQ EXP (QUOTE T)) (NUMBERP EXP))
␈↓ ↓H␈↓ (LIST (LIST (QUOTE MOVEI) 1 (LIST (QUOTE QUOTE) EXP))))
␈↓ ↓H␈↓ ((ATOM EXP)
␈↓ ↓H␈↓ (LIST
␈↓ ↓H␈↓ (LIST (QUOTE MOVE)
␈↓ ↓H␈↓ 1
␈↓ ↓H␈↓ (PLUS M (CDR (ASSOC EXP VPR)))
␈↓ ↓H␈↓ (QUOTE P))))
␈↓ ↓H␈↓ ((EQ (CAR EXP) (QUOTE CAR))
␈↓ ↓H␈↓ (COND ((ATOM (CADR EXP))
␈↓ ↓H␈↓ (LIST
␈↓ ↓H␈↓ (LIST (QUOTE HLRZ@)
␈↓ ↓H␈↓ 1
␈↓ ↓H␈↓ (PLUS M (CDR (ASSOC (CADR EXP) VPR)))
␈↓ ↓H␈↓ (QUOTE P))))
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ (LIST (COMPEXP (CADR EXP) M VPR)
␈↓ ↓H␈↓ (QUOTE ((HLRZ@ 1 1)))))))
␈↓ ↓H␈↓ ((EQ (CAR EXP) (QUOTE CDR))
␈↓ ↓H␈↓ (COND ((ATOM (CADR EXP))
␈↓ ↓H␈↓ (LIST
␈↓ ↓H␈↓ (LIST (QUOTE HRRZ@)
␈↓ ↓H␈↓ 1
␈↓ ↓H␈↓ (PLUS M (CDR (ASSOC (CADR EXP) VPR)))
␈↓ ↓H␈↓ (QUOTE P))))
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ (LIST (COMPEXP (CADR EXP) M VPR)
␈↓ ↓H␈↓ (QUOTE ((HRRZ@ 1 1)))))))
␈↓ ↓H␈↓ ((OR (EQ (CAR EXP) (QUOTE AND))
␈↓ ↓H␈↓ (EQ (CAR EXP) (QUOTE OR))
␈↓ ↓H␈↓ (EQ (CAR EXP) (QUOTE NOT))
␈↓ ↓H␈↓ (EQ (CAR EXP) (QUOTE EQ)))
␈↓ ↓H␈↓ ((LAMBDA(L1 L2)
␈↓ ↓H␈↓ (LIST (COMBOOL EXP M L1 NIL VPR)
␈↓ ↓H␈↓ (LIST (QUOTE (MOVEI 1 (QUOTE T)))
␈↓ ↓H␈↓ (LIST (QUOTE JRST) 0 L2)
␈↓ ↓H␈↓ (LIST (QUOTE LABEL) L1)
␈↓ ↓H␈↓ (QUOTE (MOVEI 1 0))
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ Z24
␈↓ ↓H␈↓ (LIST (QUOTE LABEL) L2))))
␈↓ ↓H␈↓ (GENSYM)
␈↓ ↓H␈↓ (GENSYM)))
␈↓ ↓H␈↓ ((EQ (CAR EXP) (QUOTE COND))
␈↓ ↓H␈↓ (COMCOND (CDR EXP) M (GENSYM) VPR))
␈↓ ↓H␈↓ ((EQ (CAR EXP) (QUOTE QUOTE))
␈↓ ↓H␈↓ (LIST (LIST (QUOTE MOVEI) 1 EXP)))
␈↓ ↓H␈↓ ((ATOM (CAR EXP))
␈↓ ↓H␈↓ (LIST (COMPLISA (CDR EXP) M VPR)
␈↓ ↓H␈↓ (LIST
␈↓ ↓H␈↓ (LIST (QUOTE CALL)
␈↓ ↓H␈↓ (LENGTH (CDR EXP))
␈↓ ↓H␈↓ (LIST (QUOTE E) (CAR EXP))
␈↓ ↓H␈↓ (QUOTE S)))))
␈↓ ↓H␈↓ ((EQ (CAAR EXP) (QUOTE LAMBDA))
␈↓ ↓H␈↓ ((LAMBDA(N)
␈↓ ↓H␈↓ (LIST (STACKUP (CDR EXP) M VPR)
␈↓ ↓H␈↓ (COMPEXP
␈↓ ↓H␈↓ (CADDAR EXP)
␈↓ ↓H␈↓ (DIFFERENCE M N)
␈↓ ↓H␈↓ (APEND (PRUP (CADAR EXP) (DIFFERENCE 1 M)) VPR))
␈↓ ↓H␈↓ (SUBSTACK N)))
␈↓ ↓H␈↓ (LENGTH (CDR EXP))))
␈↓ ↓H␈↓ ((QUOTE T) (QUOTE NIL))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓(DEFPROP STACKUP
␈↓ ↓H␈↓ (LAMBDA(U M VPR)
␈↓ ↓H␈↓ (COND ((NULL U) NIL)
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ (LIST (COMPEXP (CAR U) M VPR)
␈↓ ↓H␈↓ (QUOTE ((PUSH P 1)))
␈↓ ↓H␈↓ (STACKUP (CDR U) (DIFFERENCE M 1) VPR)))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓(DEFPROP CCCHAIN
␈↓ ↓H␈↓ (LAMBDA(EXP)
␈↓ ↓H␈↓ (AND (OR (EQ (CAR EXP) (QUOTE CAR)) (EQ (CAR EXP) (QUOTE CDR)))
␈↓ ↓H␈↓ (OR (ATOM (CADR EXP)) (CCCHAIN (CADR EXP)))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓(DEFPROP COMPC
␈↓ ↓H␈↓ (LAMBDA(EXP N2 M VPR)
␈↓ ↓H␈↓ (COND ((ATOM EXP) (ERR (QUOTE COMPC)))
␈↓ ↓H␈↓ ((EQ (CAR EXP) (QUOTE CAR))
␈↓ ↓H␈↓ (COND ((ATOM (CADR EXP))
␈↓ ↓H␈↓ (LIST
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ Z25
␈↓ ↓H␈↓ (LIST (QUOTE HLRZ@)
␈↓ ↓H␈↓ N2
␈↓ ↓H␈↓ (PLUS M (CDR (ASSOC (CADR EXP) VPR)))
␈↓ ↓H␈↓ (QUOTE P))))
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ (CONS (LIST (QUOTE HLRZ@) N2 N2)
␈↓ ↓H␈↓ (COMPC (CADR EXP) N2 M VPR)))))
␈↓ ↓H␈↓ ((ATOM (CADR EXP))
␈↓ ↓H␈↓ (LIST
␈↓ ↓H␈↓ (LIST (QUOTE HRRZ@)
␈↓ ↓H␈↓ N2
␈↓ ↓H␈↓ (PLUS M (CDR (ASSOC (CADR EXP) VPR)))
␈↓ ↓H␈↓ (QUOTE P))))
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ (CONS (LIST (QUOTE HRRZ@) N2 N2)
␈↓ ↓H␈↓ (COMPC (CADR EXP) N2 M VPR)))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓(DEFPROP COMCOND
␈↓ ↓H␈↓ (LAMBDA(U M L VPR)
␈↓ ↓H␈↓ (COND ((NULL U) (LIST (LIST (QUOTE LABEL) L)))
␈↓ ↓H␈↓ ((AND (NOT (ATOM (CAAR U)))
␈↓ ↓H␈↓ (EQ (CAAAR U) (QUOTE NULL))
␈↓ ↓H␈↓ (NULL (CADAR U)))
␈↓ ↓H␈↓ (LIST (COMPEXP (CADAAR U) M VPR)
␈↓ ↓H␈↓ (LIST (LIST (QUOTE JUMPE) 1 L))
␈↓ ↓H␈↓ (COMCOND (CDR U) M L VPR)))
␈↓ ↓H␈↓ ((EQ (CAAR U) (QUOTE T))
␈↓ ↓H␈↓ (LIST (COMPEXP (CADAR U) M VPR)
␈↓ ↓H␈↓ (LIST (LIST (QUOTE LABEL) L))))
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ ((LAMBDA(L1)
␈↓ ↓H␈↓ (LIST (COMBOOL (CAAR U) M L1 NIL VPR)
␈↓ ↓H␈↓ (COMPEXP (CADAR U) M VPR)
␈↓ ↓H␈↓ (LIST (LIST (QUOTE JRST) 0 L)
␈↓ ↓H␈↓ (LIST (QUOTE LABEL) L1))
␈↓ ↓H␈↓ (COMCOND (CDR U) M L VPR)))
␈↓ ↓H␈↓ (GENSYM)))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓(DEFPROP COMPLISA
␈↓ ↓H␈↓ (LAMBDA(U M VPR)
␈↓ ↓H␈↓ ((LAMBDA(Z)
␈↓ ↓H␈↓ (LIST (COMPLIS Z M 1 VPR)
␈↓ ↓H␈↓ (LOADAC Z
␈↓ ↓H␈↓ (DIFFERENCE 1 (CCOUNT Z))
␈↓ ↓H␈↓ 1
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ Z26
␈↓ ↓H␈↓ (DIFFERENCE M (CCOUNT Z))
␈↓ ↓H␈↓ VPR)
␈↓ ↓H␈↓ (SUBSTACK (CCOUNT Z))))
␈↓ ↓H␈↓ (CLASSIFY U)))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓(DEFPROP CCOUNT
␈↓ ↓H␈↓ (LAMBDA(Z)
␈↓ ↓H␈↓ (COND ((NULL Z) 0)
␈↓ ↓H␈↓ ((EQ (CAAR Z) 4) (PLUS 1 (CCOUNT (CDR Z))))
␈↓ ↓H␈↓ (T (CCOUNT (CDR Z)))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓(DEFPROP LOADAC
␈↓ ↓H␈↓ (LAMBDA(Z M2 N2 M VPR)
␈↓ ↓H␈↓ (COND ((NULL Z) NIL)
␈↓ ↓H␈↓ ((EQ (CAAR Z) 1)
␈↓ ↓H␈↓ (CONS (LIST (QUOTE MOVE)
␈↓ ↓H␈↓ N2
␈↓ ↓H␈↓ (PLUS M (CDR (ASSOC (CDAR Z) VPR)))
␈↓ ↓H␈↓ (QUOTE P))
␈↓ ↓H␈↓ (LOADAC (CDR Z) M2 (PLUS N2 1) M VPR)))
␈↓ ↓H␈↓ ((EQ (CAAR Z) 0)
␈↓ ↓H␈↓ (CONS (LIST (QUOTE MOVEI) N2 (LIST (QUOTE QUOTE) (CDAR Z)))
␈↓ ↓H␈↓ (LOADAC (CDR Z) M2 (PLUS N2 1) M VPR)))
␈↓ ↓H␈↓ ((EQ (CAAR Z) 2)
␈↓ ↓H␈↓ (CONS (LIST (QUOTE MOVEI) N2 (CDAR Z))
␈↓ ↓H␈↓ (LOADAC (CDR Z) M2 (PLUS N2 1) M VPR)))
␈↓ ↓H␈↓ ((EQ (CAAR Z) 3)
␈↓ ↓H␈↓ (LIST (REVERSE (COMPC (CDAR Z) N2 M VPR))
␈↓ ↓H␈↓ (LOADAC (CDR Z) M2 (PLUS N2 1) M VPR)))
␈↓ ↓H␈↓ ((EQ (CAAR Z) 5) (LOADAC (CDR Z) 1 (PLUS N2 1) M VPR))
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ (CONS (LIST (QUOTE MOVE) N2 M2 (QUOTE P))
␈↓ ↓H␈↓ (LOADAC (CDR Z) (PLUS M2 1) (PLUS N2 1) M VPR)))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓(DEFPROP COMPLIS
␈↓ ↓H␈↓ (LAMBDA(Z M K VPR)
␈↓ ↓H␈↓ (COND ((NULL Z) NIL)
␈↓ ↓H␈↓ ((EQ (CAAR Z) 4)
␈↓ ↓H␈↓ (LIST (COMPEXP (CDAR Z) M VPR)
␈↓ ↓H␈↓ (QUOTE ((PUSH P 1)))
␈↓ ↓H␈↓ (COMPLIS (CDR Z) (DIFFERENCE M 1) (PLUS K 1) VPR)))
␈↓ ↓H␈↓ ((EQ (CAAR Z) 5)
␈↓ ↓H␈↓ (LIST (COMPEXP (CDAR Z) M VPR)
␈↓ ↓H␈↓ (COND ((EQ K 1) NIL)
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ Z27
␈↓ ↓H␈↓ (T (LIST (LIST (QUOTE MOVE) K 1))))))
␈↓ ↓H␈↓ (T (COMPLIS (CDR Z) M (PLUS K 1) VPR))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓(DEFPROP CLASSIFY
␈↓ ↓H␈↓ (LAMBDA (U) (CLASS2 (CLASS1 U NIL) NIL T))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓(DEFPROP CLASS1
␈↓ ↓H␈↓ (LAMBDA(U V)
␈↓ ↓H␈↓ (COND ((NULL U) V)
␈↓ ↓H␈↓ ((ATOM (CAR U))
␈↓ ↓H␈↓ (COND ((OR (EQUAL (CAR U) (QUOTE NIL))
␈↓ ↓H␈↓ (EQUAL (CAR U) (QUOTE T))
␈↓ ↓H␈↓ (NUMBERP (CAR U)))
␈↓ ↓H␈↓ (CLASS1 (CDR U) (CONS (CONS 0 (CAR U)) V)))
␈↓ ↓H␈↓ (T (CLASS1 (CDR U) (CONS (CONS 1 (CAR U)) V)))))
␈↓ ↓H␈↓ ((EQUAL (CAAR U) (QUOTE QUOTE))
␈↓ ↓H␈↓ (CLASS1 (CDR U) (CONS (CONS 2 (CAR U)) V)))
␈↓ ↓H␈↓ ((CCCHAIN (CAR U))
␈↓ ↓H␈↓ (CLASS1 (CDR U) (CONS (CONS 3 (CAR U)) V)))
␈↓ ↓H␈↓ (T (CLASS1 (CDR U) (CONS (CONS 4 (CAR U)) V)))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓(DEFPROP CLASS2
␈↓ ↓H␈↓ (LAMBDA(U V FLG)
␈↓ ↓H␈↓ (COND ((NULL U) V)
␈↓ ↓H␈↓ ((AND FLG (EQ (CAAR U) 4))
␈↓ ↓H␈↓ (CLASS2 (CDR U) (CONS (CONS 5 (CDAR U)) V) NIL))
␈↓ ↓H␈↓ (T (CLASS2 (CDR U) (CONS (CAR U) V) FLG))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓(DEFPROP MKJRST
␈↓ ↓H␈↓ (LAMBDA (L) (LIST (LIST (QUOTE JRST) 0 L)))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓(DEFPROP COMBOOL
␈↓ ↓H␈↓ (LAMBDA(P M L FLG VPR)
␈↓ ↓H␈↓ (COND ((EQ P (QUOTE T)) (COND (FLG (MKJRST L)) (T NIL)))
␈↓ ↓H␈↓ ((ATOM P)
␈↓ ↓H␈↓ (LIST (COMPEXP P M VPR)
␈↓ ↓H␈↓ (LIST
␈↓ ↓H␈↓ (LIST (COND (FLG (QUOTE JUMPN)) (T (QUOTE JUMPE)))
␈↓ ↓H␈↓ 1
␈↓ ↓H␈↓ L))))
␈↓ ↓H␈↓ ((EQ (CAR P) (QUOTE EQ))
␈↓ ↓H␈↓ (LIST (COMPLISA (CDR P) M VPR)
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ Z28
␈↓ ↓H␈↓ (COND (FLG (QUOTE ((CAMN 1 2))))
␈↓ ↓H␈↓ (T (QUOTE ((CAME 1 2)))))
␈↓ ↓H␈↓ (MKJRST L)))
␈↓ ↓H␈↓ ((EQ (CAR P) (QUOTE AND))
␈↓ ↓H␈↓ (COND ((NOT FLG) (COMPANDOR (CDR P) M L NIL VPR))
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ ((LAMBDA(L1)
␈↓ ↓H␈↓ (LIST (COMPANDOR1 (CDR P) M L1 L NIL VPR)
␈↓ ↓H␈↓ (LIST (LIST (QUOTE LABEL) L1))))
␈↓ ↓H␈↓ (GENSYM)))))
␈↓ ↓H␈↓ ((EQ (CAR P) (QUOTE OR))
␈↓ ↓H␈↓ (COND (FLG (COMPANDOR (CDR P) M L T VPR))
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ ((LAMBDA(L1)
␈↓ ↓H␈↓ (LIST (COMPANDOR1 (CDR P) M L1 L T VPR)
␈↓ ↓H␈↓ (LIST (LIST (QUOTE LABEL) L1))))
␈↓ ↓H␈↓ (GENSYM)))))
␈↓ ↓H␈↓ ((EQ (CAR P) (QUOTE NOT))
␈↓ ↓H␈↓ (COMBOOL (CADR P) M L (NOT FLG) VPR))
␈↓ ↓H␈↓ ((EQ (CAR P) (QUOTE NULL))
␈↓ ↓H␈↓ (LIST (COMPEXP (CADR P) M VPR)
␈↓ ↓H␈↓ (LIST
␈↓ ↓H␈↓ (LIST (COND (FLG (QUOTE JUMPE)) (T (QUOTE JUMPN)))
␈↓ ↓H␈↓ 1
␈↓ ↓H␈↓ L))))
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ (LIST (COMPEXP P M VPR)
␈↓ ↓H␈↓ (LIST
␈↓ ↓H␈↓ (LIST (COND (FLG (QUOTE JUMPN)) (T (QUOTE JUMPE)))
␈↓ ↓H␈↓ 1
␈↓ ↓H␈↓ L))))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓(DEFPROP COMPANDOR
␈↓ ↓H␈↓ (LAMBDA(U M L FLG VPR)
␈↓ ↓H␈↓ (COND ((NULL U) NIL)
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ (LIST (COMBOOL (CAR U) M L FLG VPR)
␈↓ ↓H␈↓ (COMPANDOR (CDR U) M L FLG VPR)))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓(DEFPROP COMPANDOR1
␈↓ ↓H␈↓ (LAMBDA(U M L L2 FLG VPR)
␈↓ ↓H␈↓ (COND ((NULL U) (MKJRST L2))
␈↓ ↓H␈↓ ((NULL (CDR U)) (COMBOOL (CAR U) M L2 (NOT FLG) VPR))
␈↓ ↓H␈↓ (T
␈↓ ↓H␈↓ (LIST (COMBOOL (CAR U) M L FLG VPR)
␈↓ ↓H␈↓␈↓ ¬|CHAPTER III␈↓ Z29
␈↓ ↓H␈↓ (COMPANDOR1 (CDR U) M L L2 FLG VPR)))))
␈↓ ↓H␈↓EXPR)
␈↓ ↓H␈↓(DEFPROP FLAT
␈↓ ↓H␈↓ (LAMBDA(U S)
␈↓ ↓H␈↓ (COND ((NULL U) S)
␈↓ ↓H␈↓ ((NULL (CAR U)) (FLAT (CDR U) S))
␈↓ ↓H␈↓ ((EQ (CAR U) (QUOTE LABEL)) (CONS (CADR U) S))
␈↓ ↓H␈↓ ((ATOM (CAR U)) (CONS U S))
␈↓ ↓H␈↓ (T (FLAT (CAR U) (FLAT (CDR U) S)))))
␈↓ ↓H␈↓EXPR)